2010-11-18 92 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