2010-11-18 14 views
2

Je crée une procédure stockée mais elle génère une erreur. Quelqu'un peut-il me dire s'il y a quelque chose que je fais mal.Problème lors de la création d'une procédure stockée

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 Blé, comment expliquez-vous cette erreur au moment de la compilation? Je suis sûr que c'est parce que c'est une erreur de syntaxe de faire 'SELECT ID INTO #tmpID FROM tbl1' et non parce que l'objet existe déjà. –

Répondre

7

Parfois, le compilateur T-SQL s'embrouille, et ne se rend pas compte que d'un seul côté d'un IF serait suivi.

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

sûrement que cela ne peut pas être vrai? –

+0

+1 bonne réponse. –

+1

+1. @Lieven, c'est la bonne solution. –

-2

Il existe déjà une table temporaire #tmpID dans votre base de données. Essayez d'utiliser ceci avant votre procédure.

Drop table #tmpID 
1

Vous n'avez pas besoin d'utiliser une table temporaire. Cela devrait être suffisant:

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