我一直在写这篇关于我正在写的声明的错误,并且想知道是否有人可以提供帮助。我有两张桌子。表A和表B.当两个ID匹配时,我想用表B中的值更新表A.
目前我的代码如下:
UPDATE [Table A]
SET [Table A].[Column 1]='value', [Table A].[Column 2]='value2', [Table A].[Column 3]='value3'
INNER JOIN [Table B]
ON [Table A].[Column 1] = [Table B].[Column 1] AND [Table B].[Column 2];
但是我一直在返回一个我无法识别的语法错误。
答案 0 :(得分:1)
您在FROM
之前错过了INNER JOIN
条款。加入在SELECT
,UPDATE
或DELETE
上的工作方式相同。试试这样:
UPDATE [Table A]
SET [Table A].[Column 1]='value', [Table A].[Column 2]='value2', [Table A].[Column 3]='value3'
FROM [Table A]
INNER JOIN [Table B]
ON [Table A].[Column 1] = [Table B].[Column 1] AND [Table B].[Column 2];
(未经测试,但它应该完成这项工作)
答案 1 :(得分:0)
这会将源表(S)中的值更新为目标表(T)
UPDATE T
SET T.COLUMNA = S.COLUMNA, T.COLUMNB = S.COLUMNB
FROM TARGET T
INNER JOIN SOURCE S ON T.IDCOLUMN = S.IDCOLUMN
WHERE
S.FILTERCOLUMN = 'FILTERVALUE'
但是,如果您的方案需要使用合并语句,则可能需要考虑使用合并语句
MERGE TARGETTABLE T
USING SOURCETABLE S
ON S.IDCOLUMN = T.IDCOLUMN
WHEN MATCHED THEN
UPDATE SET COLUMNA = S.COLUMNA, COLUMNB = S.COLUMNB
WHEN NOT MATCHED BY TARGET
THEN INSERT(COLUMNA, COLUMNB) VALUES (S.COLUMNA, S.COLUMNB)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;