Пройти всю базу данных и найти в какой таблице содержится определенное значение
Господа, есть ли возможность пройтись по всей базе данных, чтобы найти название таблицы и название колонки, в которой будет содержаться определенное символьное значение?
Допустим, если бы я знал название таблицы и имя колонки то использовал бы условно 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]