Как получить список всех таблиц, в которых есть столбцы идентификаторов

Я хотел бы узнать, как получить список всех таблиц, содержащих столбцы идентификаторов, из базы данных MS SQL.


person Allan Chua    schedule 16.04.2013    source источник


Ответы (4)


Мне нравится этот подход, потому что он использует объединение вместо WHERE EXISTS или вызова COLUMNPROPERTY. Обратите внимание, что группировка необходима только в том случае, если у вас а) есть таблицы с более чем одним столбцом IDENTITY и б) вы не хотите дублировать результаты:

SELECT 
    SchemaName = s.name,
    TableName = t.name
FROM
    sys.schemas AS s
    INNER JOIN sys.tables AS t ON s.schema_id = t.schema_id
    INNER JOIN sys.columns AS c ON t.object_id = c.object_id
    INNER JOIN sys.identity_columns AS ic on c.object_id = ic.object_id AND c.column_id = ic.column_id
GROUP BY
    s.name,
    t.name
ORDER BY
    s.name,
    t.name;
person bopapa_1979    schedule 06.11.2014

Сценарий ниже сделает:

SELECT a.name as TableName,
  CASE WHEN b.name IS NULL
    THEN 'No Identity Column'
    ELSE b.name
  END as IdentityColumnName
FROM sys.tables a
  LEFT JOIN sys.identity_columns b on a.object_id = b.object_id 
person user6232480    schedule 06.12.2017

Выберите OBJECT_NAME(object_Id) Rrom sys.identity_columns, где is_identity = 1;

person Muhammad Saleh    schedule 25.11.2017

person    schedule
comment
Пожалуйста, добавьте краткое объяснение вашего кода. Ответы только на код (иногда) хороши, но ответы на код + объяснение (всегда) лучше. - person Barranka; 01.08.2014