Я знаю, что этому вопросу 5 лет, но я нашел его через Google, так что другие тоже могут.
Я рекомендую системную хранимую процедуру sp_msforeachdb. Вам не нужно создавать какие-либо другие хранимые процедуры или курсоры.
Учитывая, что ваша таблица имен баз данных уже создана:
EXECUTE sp_msforeachdb '
USE ?
IF DB_NAME()
IN( SELECT name DatabaseNames )
BEGIN
SELECT
''?'' as 'Database Name'
, COUNT(*)
FROM
MyTableName
;
END
'
Я делаю это для подведения итогов во многих базах данных, которые я восстановил с нескольких разных сайтов с одной и той же установленной схемой базы данных.
Пример:
- Повторите выполнение команд SQL для всех архивных баз данных сайта.
PRINT 'Database Name'
+ ',' + 'Site Name'
+ ',' + 'Site Code'
+ ',' + '# Users'
+ ',' + '# Seats'
+ ',' + '# Rooms'
... and so on...
+ ',' + '# of days worked'
;
EXECUTE sp_msforeachdb 'USE ?
IF DB_NAME()
IN( SELECT name FROM sys.databases WHERE name LIKE ''Site_Archive_%'' )
BEGIN
DECLARE @SiteName As Varchar(100);
DECLARE @SiteCode As Varchar(8);
DECLARE @NumUsers As Int
DECLARE @NumSeats As Int
DECLARE @NumRooms As Int
... and so on ...
SELECT @SiteName = OfficeBuildingName FROM Office
...
SELECT @NumUsers = COUNT(*) FROM NetworkUsers
...
PRINT ''?''
+ '','' + @SiteName
+ '','' + @SiteCode
+ '','' + str(@NumUsers)
...
+ '','' + str(@NumDaysWorked) ;
END
'
Самая хитрая часть - это одинарные кавычки