【发布时间】:2017-05-17 02:51:57
【问题描述】:
我正在尝试在 sql server 中执行合并更新查询。
表“my_table”有4列“field”(字符)、“date”(日期)、“val”(数字)、“revision”(日期时间)
查询是这样的:
MERGE "my_table" AS Target USING ( VALUES ('field_example','2017-01-04','0','2017-01-03 12:02:02')) AS Source ("field","date","val","revision")
ON (Target."field" = Source."field" AND Target."date" = Source."date")
WHEN MATCHED
THEN UPDATE SET Target."val" = Source."val",Target."revision" = Source."revision"
WHEN NOT MATCHED BY TARGET
THEN INSERT ("field","date","val","revision")
VALUES (Source."field", Source."date", Source."val", Source."revision")
OUTPUT $action, Inserted.*, Deleted.*;
由于“my_table”中已经有一行字段="field_example" 和 date='2017-01-04',我希望这个查询能够更新其他 2 列 "val","revision"。
我得到以下查询输出:
$action field date revision val field.1 date.1 revision.1 val.1
1 UPDATE field_example 2017-01-04 2017-01-03 12:02:02 0 field_example 2017-01-04 2017-01-03 10:09:25 161250
所以看起来不错(应该已经更新了)
但是当我查看数据库时,该行并没有更新(= val 仍然是 161250 而不是 0,revision 仍然是 2017-01-03 10:09:25)
知道为什么吗?
【问题讨论】:
-
你能添加你的表的示例数据吗?
-
希望那里没有 ROLLBACK 或 revert 语句/触发器。
标签: sql sql-server version-control merge sql-update