2009-04-10 7 views
0

Ceci est pour MS SQL 2005: Quelqu'un sait pourquoi le premier succès, puis la création de deux de la même déclaration échoue? Toutes les déclarations sont exactement les mêmes. Changer le double guillemet en deux guillemets simples a le même effet.sp_MSforeachdb MS erreur SQL

sp _ MSforeachdb @ command1 = « si (à gauche (2) = "p _" "?") Commencent; impression "?"; fin;';

produit

p _ NationalBrands
p _ NonBrand
p _ Database _ Nom _ Ce _ Begins _ Avec _ P _ Underbar

mais

sp _ MSforeachdb @ command1 = 'if (left ("?", 2) = "p _") begin; impression "?"; fin;';
sp _ MSforeachdb @ command1 = 'if (left ("?", 2) = "p _") begin; impression "?"; fin;';

produit

Msg 102, niveau 15, état 1, ligne 2 syntaxe incorrecte près de 'sp_MSforeachdb'.

Répondre

1

appels proc plusieurs stockés dans le même lot chacun a besoin EXEC (UTE)

EXEC sp_MSforeachdb @command1 = 'if (left(''?'', 2) = ''p_'') begin; print ''?''; end;'; 
EXEC sp_MSforeachdb @command1 = 'if (left(''?'', 2) = ''p_'') begin; print ''?''; end;'; 

J'utilise toujours 2 x guillemets simples ne Guillemet double pour éviter les problèmes avec le réglage de l'environnement QUOTED_IDENTIFERS.

+0

En fait, seuls les appels postérieurs au premier nécessitent l'exec. (Personnellement, je le mettrais sur les deux pour des raisons de style, mais ce n'est pas obligatoire) – cmsjr

1

Vous devez utiliser explicitement Exec lorsque vous appelez plusieurs procs de cette manière, essayez

sp_MSforeachdb @command1 = 'if (left("?", 2) = "p_") begin; print "?"; end;'; 
exec sp_MSforeachdb @command1 ='if(left("?", 2) = "p_") begin; print "?"; end;'; 

de la documentation Execute

Utilisation de EXECUTE avec des procédures stockées

Vous ne devez pas spécifier le mot clé EXECUTE lorsque vous exécutez stocké procédures lorsque l'instruction est la première dans un lot.