0

これはMSSQL2005の場合です。最初のステートメントが成功し、同じステートメントを2つ続けて作成すると失敗する理由を知っている人はいますか?すべてのステートメントはまったく同じです。二重引用符を2つの一重引用符に変更しても、同じ効果があります。

sp _MSforeachdb @ command1 ='if(left( "?"、2)= "p _")begin; 印刷"?"; 終わり;';

を生成します

p _NationalBrands
p _NonBrandpPアンダーバーで始まるデータベース名
_ _ ________

しかし

sp _MSforeachdb @ command1 ='if(left( "?"、2)= "p _")begin; 印刷"?"; 終わり;';
sp _MSforeachdb @ command1 ='if(left( "?"、2)= "p _")begin; 印刷"?"; 終わり;';

を生成します

メッセージ102、レベル15、状態1、行2'sp_MSforeachdb'の近くの構文が正しくありません。

4

2 に答える 2

1

その方法で複数のprocを呼び出す場合は、Execを明示的に使用する必要があります。

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

Executeのドキュメントから

ストアドプロシージャでのEXECUTEの使用

ステートメントがバッチの最初のものであるときにストアドプロシージャを実行するときに、EXECUTEキーワードを指定する必要はありません。

于 2009-04-10T22:30:58.730 に答える
1

同じバッチ内の複数のストアドプロシージャ呼び出しには、それぞれにEXEC(UTE)が必要です。

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

QUOTED_IDENTIFERS環境設定の問題を回避するために、二重引用符ではなく常に2x一重引用符を使用します。

于 2009-04-11T08:50:15.637 に答える