【发布时间】:2014-07-23 18:43:09
【问题描述】:
我正在尝试规范化我的表以提高数据库的效率。
为此,我从一个表中删除了几列,我正在更新其中的几列。
这是所有列都在表中时的原始查询:
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 中检索该列,该表称为 Mat。
在我的表 myActDataBaselDataTable 中,帐号字段是 ACTData 中 3 个字段的串联,因此
myActDataBaselDataTable.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]
(其中 ac 是 ACTData 的别名)
因此,在查看了 SO 上其他地方给出的答案(例如 1604091: update-a-table-using-join-in-sql-server)后,我尝试修改此特定更新语句,如下所示,但我无法正确:
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' 错误,要么收到The multi-part identifier "dt.Correct Arrears 2" could not be bound.
我将不胜感激有关如何正确处理此问题的任何指导,或有关如何做得更好的建议。
谢谢
编辑:
顺便说一句,当我将以下内容作为 SELECT 运行时,它会返回没有错误的数据:
select 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]
【问题讨论】:
-
尝试更新 dt 而不是更新 myActDataBaselDataTable
-
谢谢(非常简单,但我完全没有发现!),也许您可以将其扩展为我可以选择帮助下一个找到它的人的答案?
标签: tsql sql-server-2008-r2 sql-update jointable