2010-11-18 25 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 Wheat、コンパイル時にエラーをどう説明しますか?オブジェクトがすでに存在しているためではなく、 'SELECT ID INTO #tmpID FROM tbl1'を実行する構文エラーであるためです。 –

答えて

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

確かにそれは真実ではありませんか? –

+0

+1良い答え。 –

+1

+1。 @リーブン、これは適切な解決策です。 –

-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 
関連する問題