2010-01-07 3 views
0

je besoin d'un nom de clé primaire et nom de la colonne de clé primaire d'une table s'il vous plaît me dire ce que dois-je écrire requête ..S'il vous plaît me dire comment obtenir le nom de clé primaire dans SQL Server 2005

+0

Je suppose que vous travaillez sur un utilitaire de base de données générique; Sinon, vous devez ** connaître ** cette information déjà. Je voudrais écrire une requête contre les tables système 'sysobects' et' sysindexes' pour obtenir cette information. Cependant, je suis conscient que MS ont fourni des vues de métadonnées utiles dans les versions ultérieures de SQL Server; et vous feriez mieux de les utiliser. –

+0

Votre question se lit comme si vous vous attendez à ce qu'une clé primaire se réfère uniquement à une colonne - c'est loin d'être toujours vrai. Et bien sûr, toutes les tables n'ont pas de PK – MartW

Répondre

2
declare @tableName as nvarchar(100) 
set @tableName = 'table' 

select i.name, c.name 
from sys.index_columns ic 
    join sys.indexes i on ic.index_id=i.index_id 
    join sys.columns c on c.column_id=ic.column_id 
where 
    i.[object_id] = object_id(@tableName) and 
    ic.[object_id] = object_id(@tableName) and 
    c.[object_id] = object_id(@tableName) and 
    is_primary_key = 1 
+0

Pourquoi seulement 100? Sysname peut être 128. – MartW

+0

Aucune raison, vraiment. Je viens d'utiliser un nombre pair. –

+0

@Jonas: 128 est même, aussi :-) –

1

Voici une autre option qui utilise les vues INFORMATION_SCHEMA

SELECT 
    cu.Table_Catalog, 
    cu.Table_Schema, 
    cu.table_name, 
    cu.Constraint_name , 
    cu.column_name 

FROM 
    sys.indexes si 
    inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu 
    on si.name = cu.constraint_name 
WHERE 
    is_primary_key = 1 
+0

+1 Ceci est préférable aux tables sys spécifiques à la base de données. (@soslo: comment peut-il être lent ??? :) –

0

Juste une note de performance - les tables select using sys sont deux fois plus rapides que celles qui utilisent les vues INFORMATION_SCHEMA

Questions connexes