如何从另一个表更新临时表

LP1*_*P13 2 t-sql sql-server

我有[DETAIL]包含DetailID,PackageID,TemplateID和DocumentID列的表.该DetailID列是主键.

然后在存储过程中,我使用临时表

DECLARE @temp TABLE
(
    DetailID INT NULL,
    PackageID INT,
    TemplateID INT NULL,
    DocumentID INT NULL,        
)
Run Code Online (Sandbox Code Playgroud)

临时表已填充PackageID,TemplateID和DocumentID.我正在尝试使用匹配的行更新Temp表的DetailID.对于非匹配行,DetailID在临时表中将为null

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))
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误

必须声明标量变量"@temp"

Mar*_*ith 5

这是问题的一个解决方案(演示)

或者,您可以使用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))
Run Code Online (Sandbox Code Playgroud)