【发布时间】:2017-10-06 10:23:02
【问题描述】:
EDITED:我把表结构和真正的MERGE放在一起
我正在尝试在 Microsoft SQLServer 2014 中使用 MERGE,但在目标表中出现语法错误:
MERGE VALORATION_DETAIL_INPUTS_LIMIT AS Target
USING (VALUES (922, 4098)) AS Source(idValoration, idDetValInput)
ON (Source.idValoration = Target.idValoration AND Source.idDetValInput = Target.idDetValInput)
WHEN MATCHED THEN
UPDATE SET idSubject = 1633, idGood = 1114, idWarranty = 7519, idSubWarranty = 7520, units = 1.000000,
unitPrice = 250.000000, limit = 250.000000, percTax = 21.000000, tax = 52.500000, subtotal = 197.500000,
total = 250.000000
WHEN NOT MATCHED BY TARGET THEN
INSERT (idDetValInput, idValoration, idSubject, idGood, idWarranty, idSubWarranty, units,
unitPrice, limit, percTax, tax, subtotal, total)
VALUES(4093, 922, 1633, 1114, 7519, 7520, 1.000000, 250.000000, 250.000000, 21.000000, 52.500000, 197.500000, 250.000000)
OUTPUT $ACTION
错误是:
Msg 156, Level 15, State 1, Line ...
Incorrect syntax near the word 'AS'.
表结构:
CREATE TABLE VALORATION_DETAIL_INPUTS_LIMIT
(
idDetValInput bigint NOT NULL,
idValoration bigint NOT NULL,
idSubject bigint NOT NULL,
idGood int NULL,
idWarranty int NULL,
idSubWarranty int NULL,
units real NULL,
unitPrice money NULL,
limit money NULL,
percTax real NULL,
tax money NULL,
subtotal money NULL,
total money NULL
)
【问题讨论】:
-
您的查询中没有“第 14 行”。
-
嗯,我之前有一个“USE”和一个“GO”。我觉得没必要这么说。
-
现在,您的问题不同了。 “INSERT 语句中的列数多于 VALUES 子句中指定的值。VALUES 子句中的值数必须与 INSERT 语句中指定的列数相匹配。”所以,我所做的是在 INSERT 语句的 VALUES 部分的末尾添加两个值,它工作正常。简而言之,INSERT 语句中指定的 13 列比 INSERT 语句的 VALUES 部分提供的 11 个 VALUES 多。还有 2 个值需要在那里提供。
-
修复了这个问题,仍然出现同样的错误(从来没有得到你说的那个,你)。
-
然后,该错误不在 MERGE 中,我在新窗口中的新数据库上运行了您的表脚本 + 您的合并脚本,在我向其添加值后它工作正常。
标签: sql sql-server tsql merge