使用TableC的不同列值更新TableA,需要使用哪些列值在TableB中配置

时间:2017-11-08 06:00:27

标签: sql-server-2008 sql-update dynamic-sql

表格结构

TableA
+---------+--------+--------+
| ColA1   | ColA2  |  ColA3 |
+---------+--------+--------+
|  1      |  B1    |        |
+---------+--------+--------+
|  2      |  B2    |        |
+---------+--------+--------+

TableB
+---------+--------+--------+
| ColB1   | ColB2  |  ColB3 |
+---------+--------+--------+
|  1      |  B1    |  ColC2 |
+---------+--------+--------+
|  2      |  B2    |  ColC3 |
+---------+--------+--------+


TableC
+---------+--------+--------+
| ColC1   | ColC2  |  ColC3 |
+---------+--------+--------+
|  1      |  100   |  1000  |
+---------+--------+--------+
|  2      |  200   |  2000  |
+---------+--------+--------+

此处,需要使用基于ColA1 = ColC1的TableC中的不同列值更新列ColA3(TableA)。 ColA3可能具有来自ColC2或ColC3的值(需要使用的列在ColB3(TableB)中配置)。

对于1(ColA1)行,ColA3为100,对于2行(ColA1),ColA3为2000

由于TableC列名被指定为ColB3列值,我尝试了动态SQL。

DECLARE @Query NVARCHAR(MAX)
SET @Query = N'UPDATE TableA SET ColA3 = (SELECT '+ tabB.ColB3 +' FROM TableC WHERE ColC1 = tabA.ColA1) FROM TableA tabA JOIN TableB tabB ON tabA.ColA2 = tabB.ColB2';
EXECUTE sp_executesql @Query

但不知道如何获取TableC列名而不是“tabB.ColB3”。请同样建议我。

感谢。

1 个答案:

答案 0 :(得分:0)

更新a SET ColA3 =例如b.colb3 =' ColC2'那么c.ColC2当b.colb3 =' ColC3'那么c.ColC3结束 从表格a INNER JOIN tableb b ON a.ColA2 = b.ColB2 INNER JOIN tablec c ON a.cola1 = c.colc1