113 Stimmen

Wie kann man programmatisch feststellen, welche SQL-Tabellen eine Identitätsspalte haben?

Ich möchte eine Liste von Spalten in SQL Server 2005 erstellen, die Identitätsspalten und ihre entsprechende Tabelle in T-SQL haben.

Die Ergebnisse würden etwa so aussehen:

Tabellenname, Spaltenname

189voto

DaveCrawford Punkte 1923

Ein anderer möglicher Weg, dies für SQL Server zu tun, der weniger auf die Systemtabellen angewiesen ist (die sich von Version zu Version ändern können), ist die Verwendung der INFORMATION_SCHEMA-Ansichten:

select COLUMN_NAME, TABLE_NAME
from INFORMATION_SCHEMA.COLUMNS
where COLUMNPROPERTY(object_id(TABLE_SCHEMA+'.'+TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
order by TABLE_NAME

0 Stimmen

Beachten Sie, dass ein Problem darin besteht, dass Sie [Name der Datenbank].information_schema.columns angeben, aber von einer anderen Datenbank aus ausführen können ... und dann wird COLUMNPROPERTY mit der falschen Datenbank ausgeführt

12 Stimmen

Es ist besser so, wenn Sie andere Schemata haben: where COLUMNPROPERTY(object_id(TABLE_SCHEMA+'.'+TABLE_NAME)...

1 Stimmen

Ich glaube, diese Antwort funktioniert nicht mit Microsoft SQL Server 2014.

55voto

Kevin Crumley Punkte 5706

Sys.columns.is_identity = 1

z.B.,

select o.name, c.name
from sys.objects o inner join sys.columns c on o.object_id = c.object_id
where c.is_identity = 1

2 Stimmen

Hinweis: Dies funktioniert bei mir mit SQL 2008, während die akzeptierte Antwort dies nicht tut (die Frage fragt nach SQL 2005).

1 Stimmen

Diese Antwort funktioniert auch mit Microsoft SQL Server 2014.

30voto

Eine andere Möglichkeit (für 2000 / 2005/2012/2014):

IF ((SELECT OBJECTPROPERTY( OBJECT_ID(N'table_name_here'), 'TableHasIdentity')) = 1)
    PRINT 'Yes'
ELSE
    PRINT 'No'

HINWEIS: table_name_here sollte sein schema.table es sei denn, das Schema ist dbo .

8voto

Euro Micelli Punkte 32040

In SQL 2005:

select object_name(object_id), name
from sys.columns
where is_identity = 1

4voto

Sergey Punkte 907

Liste der Tabellen ohne Identitätsspalte basierend auf Guillermo Antwort:

SELECT DISTINCT TABLE_NAME
FROM            INFORMATION_SCHEMA.COLUMNS
WHERE        (TABLE_SCHEMA = 'dbo') AND (OBJECTPROPERTY(OBJECT_ID(TABLE_NAME), 'TableHasIdentity') = 0)
ORDER BY TABLE_NAME

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X