使用sp_msforeachdb发生错误时需要捕获数据库名称

时间:2010-09-27 22:19:08

标签: sql-server sql-server-2005

我正在为每个数据库运行带有sp_msforeachdb的动态sql命令。但是该命令会炸弹某个数据库。

怎么样?'用于在错误发生时显示数据库名称?我尝试在Catch语句中使用它但我的语法错误。

3 个答案:

答案 0 :(得分:3)

只需使用DB_NAME()

即可
EXEC sp_msforeachdb 'USE ? SELECT DB_NAME() ...do stuff'

答案 1 :(得分:0)

它对我有用:

Run Keyword If Test Failed    Capture Test Screenshot

答案 2 :(得分:0)

根据脚本的不同,您可以使用 DB_NAME()获取所有数据库的输出“ master”。
在以下情况下,您可以使用 DB_NAME(DB_ID(''?''))

exec sp_msforeachdb 'select DB_NAME(DB_ID(''?'')), Value from ?.dbo.MyTable WHERE(ColumnX = N''1'')'

这将导致如下结果:

+ ----------------- + ------- +
| DBLegacy | VA1 |
+ ------------- + ------- +
+ ------------- + ------- +
| DBNew12 | ABC |
+ ------------- + ------- +
+ ------------- + ------- +
| DBOld333 | XYZ |
+ ------------- + ------- +

要将结果放入一个结果集中,请参见: SQL Server: sp_MSforeachdb into single result set
这将导致:

+ ----------------- + ------- +
| DBLegacy | VA1 |
+ ------------- + ------- +
| DBNew12 | ABC |
+ ------------- + ------- +
| DBOld333 | XYZ |
+ ------------- + ------- +