2013-06-10 2 views
2

У меня есть имя столбца, которое в моей базе данных содержит MICROSOFT в нескольких таблицах.SQL Query, чтобы найти имя столбца в базе данных

Мне нужно знать имена столбцов всех мест, где происходит MICROSOFT.

Возможно ли это?

Если да, то в чем вопрос?

Заранее спасибо

+0

это возможность экспортировать база данных в sql-файл, а затем просто grep для этой строки? –

+0

Нет. Мне нужен запрос, который дает мне все имена столбцов во всей базе данных, которая имеет значение MICROSOFT –

+1

, тогда это может быть вопрос, связанный с базой данных, потому что, если я не ошибаюсь, вам нужно сначала запросить схему базы данных чтобы получить все имена таблиц, затем запросить схему каждой таблицы, получить все имена столбцов, а затем создать конкретный запрос для такой таблицы. –

ответ

0

В SQL Server можно использовать следующий запрос, чтобы получить один SELECT за стол со всеми столбцами, которые характер на основе

SELECT [Cmd] 
    FROM (
    SELECT 'SELECT ''' + tbl.name + ''' FROM [' + tbl.name + '] WHERE ' 
     + CAST((STUFF((SELECT '] LIKE ''%Microsoft%'' OR [' + tbl.name + '].[' + col.name FROM sys.columns col WHERE tbl.object_id = col.object_id AND col.collation_name IS NOT NULL FOR XML PATH('')), 1, 24, '')) AS VARCHAR(MAX)) 
     + '] LIKE ''%Microsoft%'';' 
     FROM sys.tables tbl 
    WHERE tbl.type = N'U' 
    ) [SQ]([Cmd]) 
WHERE [Cmd] IS NOT NULL; 
1

Так что, если вы используете SQL Server, то вы можете запустить, чтобы найти все столбцы во всех таблицах.

select 
    'SELECT * FROM ' 
    + st.name + 
    ' WHERE ' + 
     sc.name + ' = ''MICROSOFT'' ' 
from sys.tables st join sys.columns sc on st.object_id = sc.object_id 

Используя вывод этого запроса вы создаете список всех возможных комбинаций ВЫБИРАЕТ для каждого столбца в каждой таблице.

Это просто выводит список всех команд, теперь вы должны их выполнить. Чтобы выполнить каждую команду, вам нужно создать курсор, который перейдет весь список результатов.

Вы собираетесь окружить предыдущий оператор SELECT курсором, чтобы просмотреть каждый запрос и выполнить его. Таким образом, код становится чем-то вроде этого

DECLARE @myCommand VARCHAR(1000) 

DECLARE c CURSOR READ_ONLY FAST_FORWARD FOR 
    select 
     'SELECT * FROM ' 
     + st.name + 
     ' WHERE ' + 
      sc.name + ' = ''MICROSOFT'' ' 
    from sys.tables st join sys.columns sc on st.object_id = sc.object_id 
OPEN c 

FETCH NEXT FROM c INTO @myCommand 
WHILE @@FETCH_STATUS = 0 
    BEGIN 
     sp_executesql @myCommand 
    FETCH NEXT FROM c INTO @myCommand 
    END 

CLOSE c 

DEALLOCATE c 
+0

Спасибо Radu .... Я попробую это и посмотрю. –

Смежные вопросы