Необходимо захватить имя базы данных при возникновении ошибки с sp_msforeachdb - PullRequest
1 голос
/ 28 сентября 2010

Я запускаю динамическую команду sql с sp_msforeachdb для каждой базы данных.Однако команда бомбит для определенной базы данных.

Как это??используется для отображения имени базы данных при возникновении ошибки?Я пытался использовать его в операторе Catch, но мой синтаксис неправильный.

Ответы [ 3 ]

3 голосов
/ 28 сентября 2010

Просто используйте DB_NAME ()

EXEC sp_msforeachdb 'USE ? SELECT DB_NAME() ...do stuff'
0 голосов
/ 16 мая 2019

В зависимости от сценария вы получаете для всех дБ выходной "master" с помощью DB_NAME () .
Вы можете использовать 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 в единый набор результатов
Это приведет к этому:

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

0 голосов
/ 05 сентября 2018

Это сработало для меня:

exec sp_MSforeachdb 'select *, print ''?'' from TABLE'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...