gpt4 book ai didi

SQL Server MERGE 语句在 using 子句中包含 "DUAL"

转载 作者:行者123 更新时间:2023-12-03 02:34:22 28 4
gpt4 key购买 nike

使用 Oracle(或 DB2、HSQLDB),我可以表达如下内容:

MERGE INTO [target_table]
USING (SELECT 1 FROM dual)
ON [target_table.id = 5]
WHEN MATCHED THEN UPDATE ...
WHEN NOT MATCHED THEN INSERT ...

这只是检查 target_table 中是否已存在 id = 5 的记录。如果有则更新该记录,如果没有则插入该记录。这个和MySQL的比较简洁大致相同

INSERT INTO [target_table] ...
ON DUPLICATE KEY UPDATE ...

如何在 SQL Server 中执行此操作?根据文档,[table_source] 需要是以下任意一个:

<table_source> ::= 
{
table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ]
[ WITH ( table_hint [ [ , ]...n ] ) ]
| rowset_function [ [ AS ] table_alias ]
[ ( bulk_column_alias [ ,...n ] ) ]
| user_defined_function [ [ AS ] table_alias ]
| OPENXML <openxml_clause>
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
| <joined_table>
| <pivoted_table>
| <unpivoted_table>
}

http://msdn.microsoft.com/de-de/library/bb510625.aspx

显然,SQL Server 没有 DUAL 表,但也不允许使用 SELECT 语句。我可以将什么作为 [table_source]

注意:我发现我可以创建一个虚拟 View

CREATE VIEW dummy (one) AS SELECT 1;

并将其作为[table_source]提供。但我想省略 DDL 语句只是为了能够执行此 MERGE 语句

最佳答案

参见MERGE -- 查看示例“C. 使用派生源表使用 MERGE 对目标表执行 UPDATE 和 INSERT 操作”,该示例使用 VALUES(又名 Table Value Constructor ):

MERGE INTO Target
USING (VALUES (1))
AS Source (Number)
...

祝你编码愉快。

关于SQL Server MERGE 语句在 using 子句中包含 "DUAL",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6159922/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com