我有以下存储过程,它将一条记录插入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