我正在创建一个存储过程,但它会引发错误。 任何人都可以告诉我是否有什么我做错了。
CREATE TABLE tbl1 (ID int)
INSERT INTO tbl1 SELECT 1
CREATE TABLE tbl2 (ID int)
INSERT INTO tbl2 SELECT 2
CREATE PROCEDURE QOTD (@source INT)
AS
BEGIN
IF @source = 1
SELECT ID INTO #tmpID FROM tbl1
ELSE
SELECT ID INTO #tmpID FROM tbl2
SELECT ID FROM #tmpID
END
错误:已经有一个名为的对象 数据库中的'#tmpID'。
答案 0 :(得分:7)
有时T-SQL编译器会感到困惑,并且没有意识到只会跟踪IF的一侧。
CREATE PROCEDURE QOTD (@source INT)
AS
BEGIN
CREATE TABLE #tmpID(ID int)
IF @source = 1
INSERT INTO #tmpID SELECT ID FROM tbl1
ELSE
INSERT INTO #tmpID SELECT ID FROM tbl2
SELECT ID FROM #tmpID
END
答案 1 :(得分:1)
您不需要使用临时表。这应该足够了:
CREATE PROCEDURE QOTD (@source INT)
AS
BEGIN
IF @source = 1
SELECT ID FROM tbl1
ELSE
SELECT ID FROM tbl2
END
答案 2 :(得分:-2)
数据库中已存在临时表#tmpID。在手术前尝试使用它。
Drop table #tmpID