SQL Server:无法使用 where 语句从临时表中检索值



我有以下存储过程,它将一条记录插入Table2,并在Table1中更新id列。Table1中的id来自Table2中的序列号。

我使用SCOPE_IDENTITY()来获取示波器中最新分配的序列号。

但是,当我执行该过程并@flag = 1时,没有选择任何记录。 我知道WHERE id = @id有问题,因为当我注释掉 where 子句时,它起作用了。

DECLARE @id INT
SELECT id, * INTO #t FROM Table1
IF @flag = 1
BEGIN
INSERT INTO Table2 (col1, col2)
VALUES ('value', 'value2')
SET @id = SCOPE_IDENTITY()
UPDATE Table1
SET id = @id
SELECT *
FROM #t
WHERE id = @id   ---this is the problem!!
END
ELSE 
BEGIN 
SELECT * FROM #t
END

这有什么问题?

问题是,您的IDs在您的#t表中尚不可用。在Table1中更新ID后填充此表。

BEGIN
DECLARE @id INT
IF @flag = 1
BEGIN
Insert Table2(col1,col2)
VALUES ('value', 'value2')
SET @id = SCOPE_IDENTITY();
UPDATE Table1
SET id = @id;
SELECT id, * INTO #t From Table1; -- This should be its position.
SELECT *
FROM #t
WHERE id = @id   
END
ELSE 
BEGIN 
SELECT id, * FROM Table1
END
END

最新更新