J'ai réussi à concocter cette requête à partir de divers exemples pour obtenir toutes les clés de la table:Obtenir toutes les clés de la table avec des types
select tbl.name,idx.name as indexname,t1.*,col.name as colname
from dbo.sysindexkeys as t1
LEFT JOIN dbo.sysindexes as idx on (t1.id=idx.id and t1.indid=idx.indid)
LEFT JOIN dbo.syscolumns as col on (col.id=t1.id and col.colid=t1.colid)
LEFT JOIN dbo.sysobjects as tbl on (idx.id=tbl.id)
ORDER BY tbl.name,idx.name,t1.keyno
La seule autre chose que je dois est le type des clés, qui, comme je comprendre devrait être PK
, UQ
, ou D
(pas concerné par les clés étrangères pour le moment). Il semble que je dois rejoindre sysobjects
à nouveau pour obtenir la colonne xtype
, mais je ne peux pas comprendre la bonne façon de faire la jointure.
Basé sur this answer J'ai essayé
select tbl.name,idx.name as indexname,s2.xtype,t1.*,col.name as colname
from dbo.sysindexkeys as t1
LEFT JOIN dbo.sysindexes as idx on (t1.id=idx.id and t1.indid=idx.indid)
JOIN sysobjects s2 on s2.parent_obj = t1.id
LEFT JOIN dbo.syscolumns as col on (col.id=t1.id and col.colid=t1.colid)
LEFT JOIN dbo.sysobjects as tbl on (idx.id=tbl.id)
ORDER BY tbl.name,idx.name,t1.keyno
mais cela se traduit dans plusieurs enregistrements par colonne d'index et avec différents xtypes. Je veux une ligne par colonne d'index (si l'index est sur trois colonnes, alors il devrait y avoir trois rangées) toutes avec le bon xtype. De quoi ai-je besoin pour changer?
Quelle version de SQL Server êtes-vous? Toutes ces vues sont obsolètes. –
'select @@ Version': Microsoft SQL Server 2000 - 8.00.760 (Intel X86) 17 décembre 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Office Desktop Engine sur Windows NT 5.1 (Build 2600: Service Pack 2 –