ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это ОЧЕНЬ интенсивное задание, которое вы просите сделать.Я бы не рекомендовал работать в производственной среде.
Код, на который вы ссылаетесь, предназначен только для запроса таблиц в текущей базе данных.
INFORMATION_SCHEMA.TABLES :
Возвращает одну строку для каждой таблицы или представления в текущей базе данных, для которых у текущего пользователя есть разрешения.
Если вы хотите, чтобы он запускался для каждой базы данных, вам нужно изменить его так, чтобы он просматривал все базы данных.Примерно так:
DECLARE @dbName NVARCHAR(256)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbName
WHILE @@FETCH_STATUS = 0
BEGIN
--Code from proc here
END
Затем вам нужно изменить запрос, объединяющий переменную @TableName, для включения имени базы данных:
...
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT QUOTENAME(@dbName)+ '.' + MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
...