Dev*_*per 11 t-sql sql-server not-exists table-variable sql-server-2008
我试图根据条件更新表变量中的列,条件是表变量的ID不存在于不同的表中:
DECLARE @BugRep TABLE(BugCode VARCHAR(50),DevFirstName VARCHAR(50), DevLastName VARCHAR(50), BugDate VARCHAR(20), IsValid VARCHAR(1))
UPDATE @BugRep
SET IsValid = 'N' WHERE NOT EXISTS(SELECT * FROM BUG b WHERE @BugRep.BUGCODE = b.CODE)
Run Code Online (Sandbox Code Playgroud)
当我尝试编译具有这些语句的过程时,我得到一个"必须声明标量变量"@BugRep"消息.
我如何在NOT EXISTS子句中使用表变量?
我正在使用SQL Server 2008
wom*_*omp 13
这将有效:
[@BugRep].BUGCODE
Run Code Online (Sandbox Code Playgroud)
你还需要将"b.CODE"更改为"b.BUGCODE";)
这实际上非常挑剔.使用womp的建议查看下面的内嵌评论,并尝试LEFT OUTER JOIN.
CREATE TABLE Bug (CODE VARCHAR(50))
DECLARE @BugRep TABLE (
BugCode VARCHAR(50),
--DevFirstName VARCHAR(50),
--DevLastName VARCHAR(50),
--BugDate VARCHAR(20),
IsValid CHAR(1)
)
INSERT INTO Bug (CODE) VALUES ('Code1'), ('Code2'), ('Code3')
INSERT INTO @BugRep (BugCode) VALUES ('Code1'), ('Code2'), ('Code4')
SELECT CODE FROM Bug ORDER BY CODE
SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode
UPDATE @BugRep -- Can't be [@BugRep] ("Invalid object name '@BugRep'.")
SET IsValid = 'N'
WHERE NOT EXISTS (
SELECT *
FROM BUG b
WHERE [@BugRep].BUGCODE = b.CODE -- Can't be @BugRep ("Must declare the scalar variable "@BugRep".")
)
SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode
UPDATE @BugRep -- Can be either @BugRep or [@BugRep]
SET IsValid = 'Y'
FROM @BugRep -- Can't be [@BugRep] ("Invalid object name '@BugRep'.")
LEFT OUTER JOIN BUG
ON [@BugRep].BUGCODE = BUG.CODE -- Can't be @BugRep ("Must declare the scalar variable "@BugRep".")
WHERE BUG.CODE IS NOT NULL
SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode
DROP TABLE Bug
GO
Run Code Online (Sandbox Code Playgroud)