【发布时间】:2017-09-19 03:45:48
【问题描述】:
我有 [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”
【问题讨论】:
-
FWIW,空检查是多余的。 null 永远不会等于 null,因此检查
templateid is not null并检查其相等性会进行不必要的检查。 SQL 可能会优化它们,但可能不会。只是想我会提到它。 -
如果 templateid 和 documentid 都为空,我不想选择行
-
对。同样适用于文档 ID。
标签: sql-server tsql