首页 > 解决方案 > SQL Server:无法使用 where 语句从临时表中检索值

问题描述

我有以下存储过程,它将记录插入,Table2并更新id. inTable1来自序列号 in 。idTable1Table2

我曾经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

这有什么问题?

标签: sql-servertsql

解决方案


这是问题所在,IDs您的表中还没有您的可用#t。更新您的IDin后填充此表Table1

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

推荐阅读