为什么这个特定的语法不能用于upserting?

时间:2010-10-11 15:59:01

标签: sql sql-server-2005 upsert

我正在使用SQL Server 2005,我希望同步两个具有相同定义但存在于不同数据库中的表。 MERGE INTO仅存在于2008年,我更喜欢一种语法,我不必在UPDATE中指定列。所以我使用以下语法偶然发现了various posts

UPDATE Destination FROM (Source INTERSECT Destination)
INSERT INTO Destination FROM (Source EXCEPT Destination)

但是当我尝试执行它时,我得到了:

Incorrect syntax near the keyword 'FROM'.

我怎样才能使这个工作?我有多个表需要同步,我不想在每个语句中指定所有列。

感谢任何提示!

2 个答案:

答案 0 :(得分:0)

如果这不能回答您的问题,我很抱歉,但假设这样做的全部原因是为了节省时间,您不能只是右键单击源表并生成INSERT脚本,然后右键 - 单击目标表并生成一个空白的SELECT脚本,然后合并两个?只有在您的环境中可以接受杀戮和填充时,这才有效。

答案 1 :(得分:0)

根据联机丛书,update command需要set关键字,并且必须位于可选的from关键字之前。 insert command没有独立from关键字,from仅作为派生表源或公用表表达式作为select语句的一部分存在

您引用的链接未显示有效的SQL Server 2005语法。

“我怎样才能使这个工作?我有多个表需要同步,我不想在每个语句中指定所有列。”

对于update,您必须指定所有列。对于insert,如果源和目标具有相同的结构,那么您可以使用不建议用于生产代码的insert into TARGTET_TABLE_NAME select * from SOURCE_TABLE_NAME ,如果源或目标更改,则声明将打破。如果源和目标不同,则必须在插入的至少一侧指定列。