sp_MSforeachdb问题

时间:2013-01-19 07:56:51

标签: sql sql-server stored-procedures

我正在尝试为开发人员工作的环境中的存储过程分配VIEW DEFINITION访问权限,并将下面的查询作为Result to Text运行,然后复制输出并作为Result运行到Grid:

select 'GRANT VIEW DEFINITION ON ' + quotename(specific_schema) 
+ '.' + quotename(specific_name)
+ ' TO ' + 'TestAcct'
  from INFORMATION_SCHEMA.routines
where routine_type = 'PROCEDURE'

我遇到的问题是我必须对多台服务器上的每个数据库执行此操作。我试图用'sp_MSforeachdb'运行它,但是当我设置查询时它不喜欢我的select语句。有关如何为所有数据库格式化上述查询的任何想法,以便我可以复制输出并针对服务器而不是每个单独的数据库运行它?

2 个答案:

答案 0 :(得分:1)

EXEC sp_MSforeachdb 
'SELECT ''GRANT VIEW DEFINITION ON '' + quotename(''?'') + ''.'' + quotename(specific_schema) 
+ ''.'' + quotename(specific_name)
+ '' TO '' + ''TestAcct'' AS ''?''
FROM ?.INFORMATION_SCHEMA.routines
WHERE routine_type = ''PROCEDURE'''

答案 1 :(得分:1)

如果您只是让您的测试帐户查看任何内容的定义,为什么不:

grant view definition to [TestAccount]

这样,当您在数据库中创建新对象时,它会保持最新状态。在我看来,更简单的解决方案效果更好。