UPDATE表通过SQL连接

时间:2014-06-03 12:18:29

标签: tsql sql-server-2008-r2 sql-update jointable

我正在尝试规范化我的表,以提高数据库的效率。

为此,我从表中删除了几列,我正在更新几列。

以下是表中所有列的原始查询:

UPDATE myActDataBaselDataTable 
set [Correct Arrears 2]=(case when [Maturity Date]='' then 0 else datediff(d,convert(datetime,@DataDate, 102),convert(datetime,[Maturity Date],102)) end)
from myActDataBaselDataTable

现在我已从表 myActDataBaselDataTable 中删除[Maturity Date],并且必须从基准参考表ACTData中检索该列,并在其中调用该列{ {1}}。

在我的表 myActDataBaselDataTable 中,帐号字段是 ACTData 中3个字段的串联,因此

Mat

(其中ac是 ACTData 的别名)

所以,看了SO上其他地方给出的答案(例如1604091: update-a-table-using-join-in-sql-server),我试着修改这个特定的更新语句,如下所示,但我无法做到正确:

myActDataBaselDataTable.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]

我得到UPDATE myActDataBaselDataTable set dt.[Correct Arrears 2]=( case when ac.[Mat]='' then 0 else datediff(d,convert(datetime,'2014-04-30', 102),convert(datetime,ac.[Mat],102)) end) from ACTData ac inner join myActDataBaselDataTable dt ON dt.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix] 错误或Incorrect syntax near 'From'

我很感激任何关于如何做到这一点的指导,或者是关于如何做得更好的suugestiopns。

谢谢

修改

BTW,当我以 SELECT 运行以下内容时,它会返回没有错误的数据:

The multi-part identifier "dt.Correct Arrears 2" could not be bound.

1 个答案:

答案 0 :(得分:0)

在联接更新中,更新别名

update dt

令人困惑的是,在SQL的更高版本中,您不需要在更新行中使用别名