尝试在SQLServer2005上的两个数据库之间合并缺少的项时出错

relj7zay  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(257)

所以,作为一个sql新手,我正在尝试在microsoftsqlserver2005上运行一些东西(对于仍然为企业提供动力的过时数据库来说,是的)。
我可以让它在本地开发人员机器(运行SQLServer2019)上正常工作,但当我在2005服务器上运行它时,它会出错。
查询:

MERGE CustomDB.[dbo].StockCounts AS [Target] 
USING (SELECT ID, 
              ProductNo 
       FROM   CompanyDBReplication.[dbo].STOCKPRODUCT) AS [Source] (ID, 
      ProductNo) 
ON [Target].ID = [Source].ID 
WHEN NOT MATCHED THEN 
  INSERT (id, 
          ProductNo, 
          CountDate, 
          CountID) 
  VALUES ([Source].ID, 
          [Source].ProductNo, 
          NULL, 
          NULL);

错误:

Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '.'.  
Msg 156, Level 15, State 1, Line 4 Incorrect syntax near the keyword 'AS'.

现在我还不太清楚为什么会出错,也不知道该如何搜索(我真的从来没有使用过sql,一开始就不得不用谷歌搜索它)。
基本上,我希望将源数据库中的项复制/合并到目标数据库中,并添加新的项,如果在目标数据库中找不到这些项,这些项可能会添加到源数据库中。
如果有人能帮我解决这个问题,让我在SQLServer2005上工作,或者建议/给我一个不同的解决方案的例子,它可以完成同样的事情,并在SQLServer2005上工作,那将是了不起的,我将永远感激。
我得到这个解决方案的来源是:https://stackoverflow.com/a/34892729/5877943

3duebb1j

3duebb1j1#

merge语句只出现在mssql2008中,您可以改用外部联接。像这样的。

INSERT INTO CustomDB.[dbo].StockCounts (
    id, 
    ProductNo, 
    CountDate, 
    CountID
)
SELECT        
    [Source].ID, 
    [Source].ProductNo, 
    NULL, 
    NULL
FROM CompanyDBReplication.[dbo].STOCKPRODUCT) AS [Source]
LEFT JOIN CustomDB.[dbo].StockCounts AS [Target] ON [Target].ID = [Source].ID
WHERE [TARGET].Id IS NULL;

相关问题