Ecco un inizio (SQL 2005 in su):
SELECT ta.name TableName, ind.name IndexName
from sys.tables ta
left outer join sys.indexes ind
on ind.object_id = ta.object_id
and ind.is_primary_key = 1
tabelle senza chiavi primarie devono IndexName impostato su Null.
Ma questo semplicemente elenca il nome della chiave primaria. Hai bisogno di un elenco delle colonne nella chiave?
- ha aggiunto ----------------
Ecco una parte di un programma di utilità, una volta che ho scritto. Questo elenco di tutte le tabelle e colonne in ordine di tutte le chiavi primarie esistenti:
SELECT ta.name TableName, ind.name IndexName, indcol.key_ordinal IndexColumnOrder, col.name ColumnName
from sys.tables ta
left outer join sys.indexes ind
on ind.object_id = ta.object_id
and ind.is_primary_key = 1
left outer join sys.index_columns indcol
on indcol.object_id = ta.object_id
and indcol.index_id = ind.index_id
left outer join sys.columns col
on col.object_id = ta.object_id
and col.column_id = indcol.column_id
order by
ta.Name
,indcol.key_ordinal
hacking che la seguente elenca tutti (e solo) tabelle con chiavi primarie di una sola colonna:
SELECT ta.name TableName, max(col.name) ColumnName
from sys.tables ta
inner join sys.indexes ind
on ind.object_id = ta.object_id
and ind.is_primary_key = 1
inner join sys.index_columns indcol
on indcol.object_id = ta.object_id
and indcol.index_id = ind.index_id
inner join sys.columns col
on col.object_id = ta.object_id
and col.column_id = indcol.column_id
group by ta.name
having count(*) = 1
order by ta.Name
Per quanto riguarda la trasformazione in C# (non il mio forte), dovresti essere in grado di rendere questa una stored procedure, o semplicemente creare e inviare la query dal tuo codice.
fonte
2010-08-23 15:14:09
possibile duplicato di [Come ottenere l'elenco di tutte le tabelle in un database utilizzando TSQL?] (Http://stackoverflow.com/questions/175415/how-do-i-get-list-of-all-tables -in-a-database-using-tsql) –
Non un duplicato. Voglio il codice C#, non TSQL. C'è una grande differenza. –
@Sergio: il modo per farlo in C# è di eseguire uno script TSQL (ad esempio un SP). – Brian