我一直在阅读有关MERGE的大量内容,而且几乎我遇到的每篇文章都讨论了不使用表提示时的并发问题和主键冲突。此特定查询将不在并发环境中,但我想测试语法。我最近整理了一个简短的脚本示例,以帮助其他开发人员,但无法弄清楚它为什么不解析。
有人能说清楚这个吗?
DECLARE @Table1 TABLE (ID INT PRIMARY KEY IDENTITY(1,1), Test CHAR(1))
DECLARE @Table2 TABLE (ID INT PRIMARY KEY IDENTITY(1,1), Test CHAR(1))
INSERT INTO @Table2 (Test) VALUES ('A'),('B')
MERGE INTO @Table1 WITH(HOLDLOCK) AS T
USING @Table2 AS S
ON (T.ID = S.ID)
WHEN NOT MATCHED THEN
INSERT (Test) VALUES (S.Test)
OUTPUT $action, inserted.*;
消息156,第15级,状态1,第7行 关键字' WITH'
附近的语法不正确答案 0 :(得分:0)
花了半个小时后,我意识到表提示仅适用于 permanent&临时表但不包含表变量!!!
CREATE TABLE #Table1 (ID INT PRIMARY KEY IDENTITY(1,1), Test CHAR(1))
CREATE TABLE #Table2 (ID INT PRIMARY KEY IDENTITY(1,1), Test CHAR(1))
INSERT INTO #Table2 (Test) VALUES ('A'),('B')
MERGE INTO #Table1 WITH(HOLDLOCK) AS T
USING #Table2 AS S
ON (T.ID = S.ID)
WHEN NOT MATCHED THEN
INSERT (Test) VALUES (S.Test)
OUTPUT $action, inserted.*;
SELECT * FROM #Table1
DROP TABLE #Table1
DROP TABLE #Table2
请检查此查询。