我有一个要测试的查询。如果查询在具有现有主键的表中找到数据,则查询应更新数据。如果没有,则插入表中。
主键的类型为int,并且在属性中,我可以看到Identity设置为“ True”,这意味着如果插入,它将自动为主键设置新的ID。
MERGE INTO Test_table t
USING (SELECT 461232 ID,'Test1-data' Fascia FROM Test_table) s
ON (t.ID = s.ID)
WHEN MATCHED THEN
UPDATE SET t.Fascia = s.Fascia
WHEN NOT MATCHED THEN
INSERT (Fascia)
VALUES (s.Fascia);
这里的问题是此查询不起作用,并且它从不插入数据或更新。另外,查询被编译,我没有任何编译错误
另外,我想要此查询的原因是可以正常工作,因为然后我将使用Java准备的语句来查询数据库,所以我假设我可以做
SELECT ? ID,? Fascia FROM Test_table
这样我就可以使用java中的set方法传递值。
如果我的查询有问题,请告诉我。
最佳答案
您正在从目标表中选择源。
您需要删除FROM Test_table
,或者在Test_table
之前的merge
中至少包含1行。
上个月的演示:http://rextester.com/XROJD28508
MERGE INTO Test_table t
USING (SELECT 461232 ID,'Test1-data' Fascia --FROM Test_table
) s
ON (t.ID = s.ID)
WHEN MATCHED THEN
UPDATE SET t.Fascia = s.Fascia
WHEN NOT MATCHED THEN
INSERT (Fascia)
VALUES (s.Fascia);