2011-04-04 5 views
0

Pour la première fois, merci de me faire savoir si cette question a déjà été répondue! J'ai essayé de chercher, mais je n'ai rien trouvé.Modifier la table dans la procédure stockée

Dans ma procédure stockée, je sélectionne dans une table temporaire pendant que je fais quelques modifications (Ive l'a descendu au problème de base).

SELECT 'a' AS ColA, 'b' AS ColB INTO #tmp 

ALTER TABLE #tmp 
    ADD ColC char(5) NULL, 
     ColD char(5) NULL, 
     ColE char(5) NULL 

UPDATE #tmp 
SET ColC = 'c', 
    ColD = 'd', 
    ColE = 'e' 
FROM #tmp 

SELECT * FROM #tmp 

Dans l'Analyseur de requêtes Si vous mettez en surbrillance & les exécuter séparément, dans l'ordre, j'obtenir la sortie désirée.

ColA ColB ColC ColD ColE 
---- ---- ----- ----- ----- 
a b c  d  e  

Cependant, quand je les dirige tous ensemble, je reçois l'erreur suivante:

(1 row(s) affected) 
Msg 207, Level 16, State 1, Line 10 
Invalid column name 'colC'. 

Il ressemble à l'instruction ALTER TABLE est en cours de sauté? J'ai inséré des instructions GO après chaque commande, et le code a fonctionné dans l'analyseur de requête. Cependant, je n'arrive pas à comprendre comment répliquer ceci dans une procédure stockée. (Existe-t-il un équivalent "GO" pour s-procs?)

Toute aide est grandement appréciée!

+0

Je couru contre SQl 2005 et obtenu la sortie désirée sans aucune erreur. – Chandu

+0

@Cybernate - moi aussi! –

+0

oublié de noter, je suis coincé sur SQL 2000 pour cela :( – TheNoodle

Répondre

0

GO ne fait pas partie de T-SQL, c'est un séparateur de lots pris en charge par un certain nombre d'outils SQL Server.

Vous pouvez généralement faire le ALTER TABLE avec un EXEC, mais si votre problème nécessitant un ALTER immédiatement après Crées est comment obtenir des colonnes factices, votre exemple spécifique peut simplement être fait:

SELECT 'a' AS ColA 
    ,'b' AS ColB 
    ,CAST(NULL AS char(5)) AS ColC 
    ,CAST(NULL AS char(5)) AS ColD 
    ,CAST(NULL AS char(5)) AS ColE 
INTO #tmp 

UPDATE #tmp 
SET ColC = 'c', 
    ColD = 'd', 
    ColE = 'e' 
FROM #tmp 

SELECT * FROM #tmp 
+0

Parfait, résolu le problème.Merci! – TheNoodle

Questions connexes