Sql server sp_msforeachdb发生错误时需要捕获数据库名称

Sql server sp_msforeachdb发生错误时需要捕获数据库名称,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我正在为每个数据库运行带有sp_msforeachdb的动态sql命令。然而,该命令轰炸了某个数据库 发生错误时,如何使用“?”显示数据库名称?我尝试在Catch语句中使用它,但语法错误。只需使用DB_NAME() 这对我起了作用: exec sp_MSforeachdb 'select *, print ''?'' from TABLE' 根据脚本的不同,您可以为所有数据库获取具有db_NAME()的输出“master” 在以下情况下,您可以使用DB_名称(DB_ID(“”?“”)): ex

我正在为每个数据库运行带有sp_msforeachdb的动态sql命令。然而,该命令轰炸了某个数据库

发生错误时,如何使用“?”显示数据库名称?我尝试在Catch语句中使用它,但语法错误。

只需使用DB_NAME()

这对我起了作用:

exec sp_MSforeachdb 'select *, print ''?'' from TABLE'

根据脚本的不同,您可以为所有数据库获取具有db_NAME()的输出“master”
在以下情况下,您可以使用DB_名称(DB_ID(“”?“”)):

exec sp_msforeachdb 'select DB_NAME(DB_ID(''?'')), Value from ?.dbo.MyTable WHERE(ColumnX = N''1'')'
这将导致如下结果:

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

要将结果放入一个结果集中,请参见:
这将导致:

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

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