这适用于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'附近的语法不正确。
答案 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环境设置出现问题。