我正在尝试规范化我的表,以提高数据库的效率。
为此,我从表中删除了几列,我正在更新几列。
以下是表中所有列的原始查询:
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.
答案 0 :(得分:0)
在联接更新中,更新别名
update dt
令人困惑的是,在SQL的更高版本中,您不需要在更新行中使用别名