2010-11-18 106 views
2

我正在創建一個存儲過程,但它會引發錯誤。 有人可以告訴我,如果有什麼我做錯了。創建存儲過程中的問題

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 

ERROR:There is already an object named '#tmpID' in the database.

+1

@Mitch小麥,你怎麼在編譯時解釋錯誤?我很確定這是因爲這是一個語法錯誤,因爲這個對象已經存在了,所以'SELECT ID INTO #tmpID FROM tbl1'。 – 2010-11-18 12:11:55

回答

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 
+0

肯定不可能是真的? – 2010-11-18 12:11:03

+0

+1好答案。 – 2010-11-18 12:12:56

+1

+1。 @Lieven,這是正確的解決方案。 – 2010-11-18 12:15:40

-2

已經有一個臨時表#tmpID在數據庫中。在你的程序之前嘗試使用這個。

Drop table #tmpID 
1

您不需要使用臨時表。這應該夠了:

CREATE PROCEDURE QOTD (@source INT) 
AS 
BEGIN 
IF @source = 1 
    SELECT ID FROM tbl1 
ELSE 
    SELECT ID FROM tbl2 
END