Пройти всю базу данных и найти в какой таблице содержится определенное значение

Господа, есть ли возможность пройтись по всей базе данных, чтобы найти название таблицы и название колонки, в которой будет содержаться определенное символьное значение?
Допустим, если бы я знал название таблицы и имя колонки то использовал бы условно select col_name from table where col_name like '%Колобок%'. Но я не знаю ни название колонки, ни название таблицы, но точно знаю что есть текущее значение где-то в базе, как-то можно это провернуть? MSSQL


Ответы (1 шт):

Автор решения: Виталий Злобин

Этот запрос поможет вывести все таблицы и столбцы этих таблиц:

DECLARE @NameDB NVARCHAR(30) = (SELECT db_name(dbid) FROM master.dbo.sysprocesses WHERE spid = @@spid)
    
SELECT  @NameDB AS [DB]
        ,[SCHEMA_NAME]
        ,[TABLE]
        ,C.[NAME] AS [COLUMN]
        ,[COLUMN_ID] AS [COLUMN_N]
        ,CONCAT('[', @NameDB, ']', '.','[', [SCHEMA_NAME], ']', '.', '[', [TABLE], ']') AS [PATH]
        ,CONCAT('SELECT TOP (1000) * FROM ', '[', @NameDB, ']', '.','[', [SCHEMA_NAME], ']', '.', '[', [TABLE], ']') AS [QUERY]
        --,[SCHEMA_NAME]
FROM sys.all_columns AS C WITH(NOLOCK)
JOIN (  SELECT  sys.objects.[NAME] AS [TABLE]
                ,sys.objects.[OBJECT_ID]
                ,sys.schemas.[NAME] AS [SCHEMA_NAME]
                ,N'1' AS I
        FROM sys.objects WITH(NOLOCK)
        JOIN sys.schemas WITH(NOLOCK) ON sys.objects.schema_id = sys.schemas.schema_id
        WHERE type = 'U'
) AS [SubQ] ON C.[OBJECT_ID] = [SubQ].[OBJECT_ID]
ORDER BY [TABLE], [COLUMN_ID]
→ Ссылка