【发布时间】:2015-07-14 11:27:23
【问题描述】:
我有两个要合并的表。每行包含上次修改的时间。我想合并这些表,以便将最新的值分配给两个表。
这是我要使用的代码,注释掉的是导致我的问题的原因。
-- synchronize databases
MERGE [ClientDB].[dbo].[Table] trgt
USING [MasterDB].[dbo].[Table] src
ON trgt.ID = src.ID
WHEN MATCHED THEN
-- IF src.LastModified > trgt.LastModified -- if the source is newer
UPDATE SET trgt.[Info] = src.[Info] -- update the target
-- ELSE
-- UPDATE SET src.[Info] = trgt.[Info] -- otherwise update the source
WHEN NOT MATCHED BY SOURCE
THEN DELETE
WHEN NOT MATCHED BY TARGET
THEN INSERT ([Info]) VALUES (src.[Info]);
它不起作用有两个原因,
1) 它在语法上看起来不像嵌套在WHEN MATCHED THEN 中的IF 语句。
2)它也不希望我更新源,这是有问题的,因为我想双向同步。如果我切换 trgt 和 src 我得到错误:
无法绑定多部分标识符“src.Description”。
我怎样才能做到这一点?我应该放弃MERGE 还是它有能力做我想做的事?
我对 SQL 非常陌生,所以如果有任何地方有问题,请随时纠正我的想法。提前致谢。
【问题讨论】:
-
这不是 MERGE 的工作方式——它用于在一个语句上更新和插入一个表。不是同时更新两个表。
标签: sql sql-server insert merge