109 votes

Comment déterminer par programme les tables SQL qui ont une colonne d'identité ?

Je veux créer une liste de colonnes dans SQL Server 2005 qui ont des colonnes d'identité et leur table correspondante en T-SQL.

Les résultats seraient quelque chose comme :

Nom de la table, Nom de la colonne

180voto

DaveCrawford Points 671

Une autre façon de procéder pour SQL Server, qui s'appuie moins sur les tables système (qui sont sujettes à des modifications de version en version), est d'utiliser les vues vues INFORMATION_SCHEMA :

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

54voto

kcrumley Points 2495

Sys.columns.is_identity = 1

par exemple,

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

28voto

Une autre façon (pour 2000 / 2005/2012/2014) :

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

NOTE : table_name_here devrait être schema.table à moins que le schéma soit dbo .

8voto

Euro Micelli Points 12845

Dans SQL 2005 :

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

3voto

Manrico Corazzi Points 6458

Cette requête semble faire l'affaire :

SELECT 
    sys.objects.name AS table_name, 
    sys.columns.name AS column_name
FROM sys.columns JOIN sys.objects 
    ON sys.columns.object_id=sys.objects.object_id
WHERE 
    sys.columns.is_identity=1
    AND
    sys.objects.type in (N'U')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X