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

时间:2017-09-18 19:30:48

标签: sql-server tsql

我有[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"

2 个答案:

答案 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)
    )