wake-up-neo.net

Wie bekomme ich eine Liste aller Tabellen mit Identitätsspalten?

Ich möchte lernen, wie Sie eine Liste aller Tabellen mit Identitätsspalten aus einer MS SQL-Datenbank abrufen.

21
Allan Chua
SELECT 
  [schema] = s.name,
  [table] = t.name
FROM sys.schemas AS s
INNER JOIN sys.tables AS t
  ON s.[schema_id] = t.[schema_id]
WHERE EXISTS 
(
  SELECT 1 FROM sys.identity_columns
    WHERE [object_id] = t.[object_id]
);
42
Aaron Bertrand
      select COLUMN_NAME, TABLE_NAME
      from INFORMATION_SCHEMA.COLUMNS
       where TABLE_SCHEMA = 'dbo'
       and COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
       order by TABLE_NAME
7
Sureshkumar

Ich mag diesen Ansatz, weil er einen Join anstelle von WHERE EXISTS oder einen Aufruf von COLUMNPROPERTY verwendet. Beachten Sie, dass die Gruppe by nur erforderlich ist, wenn Sie a) Tabellen mit mehr als einer IDENTITY-Spalte haben und b) keine doppelten Ergebnisse wünschen:

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;
4
Eric Burcham

Das folgende Skript wird dies tun:

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 
0
user6232480