Подтвердить что ты не робот

SQL Query для поиска схемы всех таблиц

Я работаю над SQL Server 2008 Db, в котором есть много таблиц (около 200). Многие из этих таблиц содержат поле под названием "CreatedDate". Я пытаюсь идентифицировать всю схему таблицы с этим конкретным полем.

Есть ли запрос SQL для этого?

4b9b3361

Ответ 1

Я бы запросил информационную_схему - у нее есть представления, которые гораздо читабельны, чем базовые таблицы.

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%create%'

Ответ 2

Вы также можете попробовать сделать это, используя один из многих сторонних инструментов, доступных для этого.

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

Кроме того, они очень удобны, когда некоторые объекты зашифрованы, и вам нужно искать

Im использует ApexSQL Search, который является бесплатным, но на рынке есть также много других (также бесплатных), таких как Red Gate или SSMS Tool Pack.

Ответ 3

  select object_name(c.object_id) as table_name
    , schema_name(t.schema_id) as schema_name
    from sys.columns c
    join sys.tables t on c.object_id = t.object_id
     where c.name=N'CreatedDate';

Это становится немного сложнее, если вы хотите использовать другие свойства таблицы, но вы будете ссылаться на представления каталога объектов, например sys.tables, sys.columns и т.д.

Ответ 4

Мой любимый...

SELECT objParent.name AS parent, obj.name, col.*
FROM sysobjects obj 
    LEFT JOIN syscolumns col
        ON obj.id = col.id
    LEFT JOIN sysobjects objParent
        ON objParent.id = obj.parent_obj
WHERE col.name LIKE '%Comment%'
   OR obj.name LIKE '%Comment%'

Выше я ищу "Комментарий".

Снимите знаки процента, если вы хотите получить прямую совпадение.

Это ищет таблицы, поля и такие вещи, как имена первичных ключей, ограничения, представления и т.д.

И когда вы хотите искать в StoredProcs после обезглавливания с помощью таблиц (и нужно сделать совпадение с procs), используйте следующее...

SELECT name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Comment%'

Надеюсь, что это поможет, я нахожу эти два запроса чрезвычайно полезными.

Ответ 5

Используйте этот запрос:

SELECT 
    t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name , *
FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
Where 
    ( c.name LIKE '%' + '<ColumnName>' + '%' )
    AND 
    ( t.type = 'U' ) -- Use This To Prevent Selecting System Tables

Ответ 6

То же самое, но по ANSI

SELECT   * ИЗ   INFORMATION_SCHEMA.TABLES ГДЕ   TABLE_NAME IN (                   ВЫБРАТЬ                       TABLE_NAME                   ИЗ                       INFORMATION_SCHEMA.COLUMNS                   ГДЕ                       COLUMN_NAME = 'CreateDate'                 )

Ответ 7

Вам не нужно вводить SQL Query для этого в SQL Server 2008.

В обозревателе объектов SSMS выберите "Базы данных" или "Таблицы" требуемой базы данных (если вам нужно выполнить поиск в одной базе данных), откройте меню "Вид" → "Сведения обозревателя объектов" (в качестве альтернативы нажмите F7), введите% CreatedDate% в поле "Поиск", "Enter", наслаждайтесь

Ответ 8

Для меня у меня есть только доступ для чтения для запуска запросов, поэтому мне часто нужно использовать эту функцию, вот что я использую:

SELECT  *
FROM    INFORMATION_SCHEMA.TABLES
where   TABLES.TABLE_NAME like '%your table name here%'

Вы можете заменить .TABLES на .COLUMNS, тогда он будет выглядеть так:

 SELECT *
 FROM   INFORMATION_SCHEMA.COLUMNS
 WHERE  columns.COLUMN_NAME like '%your column name here%'