Найти все таблицы, содержащие столбец с указанным именем - MS SQL Server - PullRequest
1013 голосов
/ 31 января 2011

Можно ли запросить имена таблиц, которые содержат столбцы

LIKE '%myName%'

?

Ответы [ 24 ]

20 голосов
/ 31 января 2011
SELECT COLUMN_NAME, TABLE_NAME
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'
20 голосов
/ 18 октября 2013
SELECT  [TABLE_NAME] ,
        [INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ;
16 голосов
/ 21 января 2013

Следующий запрос даст вам точные имена таблиц базы данных с именем поля, например "% myName".

SELECT distinct(TABLE_NAME)
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'
14 голосов
/ 01 августа 2016

Для получения полной информации: имя столбца, имя таблицы, а также схема таблицы.

SELECT COLUMN_NAME, TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%col_Name%'
12 голосов
/ 10 июля 2014

Я только что попробовал, и это прекрасно работает

USE YourDatabseName
GO
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 '%YourColumnName%'
ORDER BY schema_name, table_name;

Измените YourDatbaseName только на свою базу данных, а YourcolumnName на имя столбца, которое вы ищете, а оставьте его как есть.

Надеюсь, это помогло

8 голосов
/ 14 марта 2014
DECLARE @columnName as varchar(100)
SET @columnName = 'ColumnName'

SELECT t.name AS Table, c.name AS Column,
ty.name AS Type, c.max_length AS Length
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE c.name LIKE @columnName
ORDER BY t.name, c.name
7 голосов
/ 23 июня 2015

Я использовал это для той же цели, и это сработало:

  select * from INFORMATION_SCHEMA.COLUMNS
  where TABLE_CATALOG= 'theDatabase'
  and COLUMN_NAME like 'theCol%'
6 голосов
/ 27 июня 2014

Надеюсь, это не повторяющийся ответ, но я хотел бы создать оператор SQL внутри оператора SQL, который позволит мне искать значения, которые я ищу (а не только таблицы с этими именами полей ( как обычно мне необходимо затем удалить любую информацию, связанную с идентификатором имени столбца, который я ищу):

  SELECT  'Select * from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
  FROM sys.columns c, c.name as ColName, t.name as TableName
  JOIN sys.tables t 
     ON c.object_id = t.object_id
  WHERE c.name LIKE '%ProjectID%'

Затем я могу скопировать и вставить мой первый столбец «SQLToRun» ... затем я заменяю «Выбрать * из» на «Удалить из», и это позволяет мне удалять любые ссылки на данный идентификатор! Записать эти результаты в файл, так что вы их на всякий случай.

ПРИМЕЧАНИЕ **** Убедитесь, что вы удалили все таблицы bakup перед выполнением оператора удаления ...

  SELECT  'Delete from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
  FROM sys.columns c, c.name as ColName, t.name as TableName
  JOIN sys.tables t 
     ON c.object_id = t.object_id
  WHERE c.name LIKE '%ProjectID%'
6 голосов
/ 13 августа 2015
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 '%Label%'
ORDER BY schema_name, table_name;
5 голосов
/ 03 ноября 2015

Подобно оракулу, вы можете найти таблицы и столбцы с этим:

...