问题
表格1:
| KeyColumn | DataColumn1 | DataColumn2| 01 0.1 0.2 02 0.13 0.41
表2:
| anotherKey | DataColumn1 | DataColumn2| A1 .15 1.2 A2 .25 23.1
表3:
|KeyColumn| anotherKey | 01 A1 02 A1
给定一个键(A1或A2),我需要用表2中的相应值来更新表1中的DataColumn1和DataColumn2列.
所以table1可以更新X行数,如上面的数据所示.如果要更新A1,则应更新01和02行
(因此,对于datacolumn1,表1中的值为0.15,对于01和02键,datacolumn2的值为1.2)
到目前为止我已经尝试过
MERGE table1 USING (SELECT * FROM table2 LEFT OUTER JOIN table3 on table2.anotherKey = table3.anotherKey WHERE table2.anotherKey = 'A1') tmpTable ON table1.keyColumn = tmpTable.keyColumn WHEN MATCHED THEN UPDATE SET table1.DataColumn1 = tmpTable.DataColumn1,table1.DataColumn2 = tmpTable.DataColumn2;
问题:
这是否允许?要在using语句中使用select?我在第1行出现语法错误
有没有更好的办法呢?我做这个比它要复杂吗?
>我做错了什么?
和错误:
消息102,第15级,状态1,第1行
‘a’附近的语法不正确.
消息102,第12行
‘d’附近的语法不正确.
解决方法
您的查询将给出错误
Msg 8156,Level 16,State 1,Line 59 The column 'AnotherKey' was specified multiple times for 'tmpTable'.
那是因为你在using子句中使用*,AnotherKey是table2和table3的一部分.
指定您需要的列.因为在onclause中使用keycolumn,所以没有任何外部连接.
MERGE table1 USING (SELECT table3.keycolumn,table2.DataColumn1,table2.DataColumn2 FROM table2 INNER JOIN table3 ON table2.anotherKey = table3.anotherKey WHERE table2.anotherKey = 'A1') tmpTable ON table1.keyColumn = tmpTable.keyColumn WHEN MATCHED THEN UPDATE SET table1.DataColumn1 = tmpTable.DataColumn1,table1.DataColumn2 = tmpTable.DataColumn2;
更新
发布实际错误总是有帮助的.
Msg 102,Level 15,Line 1 Incorrect Syntax near 'a'. Msg 102,Line 12 Incorrect Syntax near 'd'.
看起来你在sql Server 2005上.合并从SQL Server 2008可以.
您可以使用select @@版本检查您的sql Server版本.