我有[DETAIL]
表,其中包含DetailID,PackageID,TemplateID和DocumentID列。 DetailID
列是主键。
然后在存储过程中,我使用临时表
DECLARE @temp TABLE
(
DetailID INT NULL,
PackageID INT,
TemplateID INT NULL,
DocumentID INT NULL,
)
临时表已填充PackageID,TemplateID和DocumentID。 我正在尝试使用匹配的行更新Temp表的DetailID。对于非匹配行,DetailID在临时表中将为空
UPDATE @temp
SET DetailID = D.DetailID
FROM Details D
WHERE D.PackageID = @temp.PackageID AND
((D.TemplateID IS NOT NULL AND D.TemplateID = @temp.TemplateID) OR
(D.DocumentID IS NOT NULL AND D.DocumentID = @temp.DocumentID))
我收到错误
必须声明标量变量" @ temp"
答案 0 :(得分:5)
以下是该问题的一种解决方案(demo)
或者,您可以使用UPDATE ... FROM .... JOIN
语法并为其指定别名。
UPDATE @temp
SET DetailID = D.DetailID
FROM Details D
WHERE D.PackageID = [@temp].PackageID AND
((D.TemplateID IS NOT NULL AND D.TemplateID = [@temp].TemplateID) OR
(D.DocumentID IS NOT NULL AND D.DocumentID = [@temp].DocumentID))
答案 1 :(得分:3)
尝试更改为:
UPDATE t
SET DetailID = D.DetailID
FROM Details D
JOIN @temp t
ON t.PackageID = d.PackageID
AND (
(D.TemplateID IS NOT NULL AND D.TamplateID = t.TemplateID)
OR (D.DocumentID IS NOT NULL AND D.DocumentID = t.DocumentID)
)