sp_MSforeachdb MS SQL错误

时间:2009-04-10 21:23:18

标签: sql-server sp-msforeachdb

这适用于MS SQL 2005:任何人都知道为什么第一个成功,然后连续创建两个相同的语句失败?所有陈述都完全一样。将双引号更改为两个单引号具有相同的效果。

  

sp _ MSforeachdb @ command1 ='if(left(“?”,2)=“p _”)begin;打印“?”;结束;';

     

产生

     

p _ NationalBrands
  p _ NonBrand
  p _的数据库_ {名称{1}}这_ {起始{1}}通过_ p _下划线

  

sp _ MSforeachdb @ command1 ='if(left(“?”,2)=“p _”)begin;打印“?”;端;';
  sp _ MSforeachdb @ command1 ='if(left(“?”,2)=“p _”)begin;打印“?”;结束;';

     

产生

     

Msg 102,Level 15,State 1,Line 2   'sp_MSforeachdb'附近的语法不正确。

2 个答案:

答案 0 :(得分: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   执行存储时的关键字   声明的程序是   第一批一批。

答案 1 :(得分: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;';

我总是使用2 x单引号而不是双引号来避免QUOTED_IDENTIFERS环境设置出现问题。