2010-10-15 10 views
0

La situation est:Comment créer plusieurs procédures stockées à l'aide de ExecuteNonQuery?

Je veux créer deux procédures stockées:

query1 = CREATE PROCEDURE MyProc1 AS SELECT * FROM TEST1; 

et

query2 = CREATE PROCEDURE MyProc2 AS SELECT * FROM TEST2; 

je peux le faire en utilisant

command.CommandText = query1; 
command.ExecuteNonQuery(); 
command.CommandTest = query2; 
command.ExecuteNonQuery(); 

Est-il possible de créer ces deux procédures dans un ExecuteNonQuery(), comme:

command.CommandText = query1 + query2; 
command.ExecuteNonQuery(); 
+0

Quel est le problème? Ça ne rentre pas dans mon architecutre actuel et je ne veux pas le réécrire :). La couche supérieure obtient une requête/commande qui crée "quelque chose" et la crée simplement. Je ne veux pas discuter de l'architecuture - peut-être que c'est mauvais, mais la question était "est-il possible de le faire en une seule requête?" –

Répondre

1

Non, tout dans un seul appel de ExecuteNonQuery est exécuté en un seul lot. Pour citer de CREATE PROCEDURE:

L'instruction CREATE PROCEDURE ne peut pas être combinée avec d'autres instructions Transact-SQL dans un seul lot.

+0

Merci beaucoup. –

2

Il existe une solution, vous pouvez envelopper chaque procédure avec une instruction EXEC

par exemple

EXEC('CREATE PROCEDURE MyProc1 AS SELECT * FROM TEST1;') 
EXEC('CREATE PROCEDURE MyProc2 AS SELECT * FROM TEST2;') 
EXEC('CREATE PROCEDURE MyProc3 AS SELECT ''hello'';') 

Remarque: Assurez-vous de remplacer chaque guillemet simple ' avec deux guillemets simples '' dans le texte de procédure (exemple dans MyProc3)