0

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

sp _MSforeachdb @command1 = 'if (left("?", 2) = "p _") 开始;打印 ”?”; 结尾;';

生产

p _NationalBrands
p _NonBrand
p以P下划线开头的_数据库_名称_____

sp _MSforeachdb @command1 = 'if (left("?", 2) = "p _") 开始;打印 ”?”; 结尾;';
sp _MSforeachdb @command1 = 'if (left("?", 2) = "p _") 开始;打印 ”?”; 结尾;';

生产

消息 102,级别 15,状态 1,第 2 行“sp_MSforeachdb”附近的语法不正确。

4

2 回答 2

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 环境设置出现问题。

于 2009-04-11T08:50:15.637 回答
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 回答