2016-06-30 20 views
2

Ich versuche, die .NET GetSchema-Methode zum Abrufen von Metadaten zu einigen Tabellen in SQL Server zu verwenden.
Ich kann Spalteninformationen wie Datentyp und Größe abrufen, aber wenn ich "ForeignKeys" versuche, sagt es mir nicht den Namen der zugehörigen Tabelle oder den zugehörigen Spaltennamen.
Unten ist mein aktueller Code.
Kann dies mit GetSchema getan werden? Wenn nicht, verwende ich SQL-Abfragen in den Systemtabellen oder Informationstabellen, wie sie auch heißen.
Wenn Sie die GetSchema Antwort nicht wissen, zögern Sie nicht, eine gute SQL-Abfrage zu empfehlen.So erhalten Sie Informationen zu Fremdschlüsseln In .NET

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    string[] restrictions = new string[4]; 
    restrictions[1] = schemaName; 
    restrictions[2] = tableName; 
    DataTable schema = connection.GetSchema("ForeignKeys", restrictions); 
} 

Antwort

0

Ich glaube, ich werde SMO-Objekte verwenden, wenn ich sie bekommen kann auf meinem Web-Host ausgeführt werden. Ich erhalte einen neuen Fehler, dass SqlClrProvider nicht gefunden werden kann. Ich kann diese DLL nicht auf meinem lokalen Computer finden, aber SMO funktioniert auf meinem lokalen Computer. Edit: Ich fand die SqlClrProvider.dll, hinzugefügt die Referenz, neu veröffentlicht, um meinen Web-Host und es lief perfekt. Problem mit SMO-Objekten gelöst, um die Metadaten des Fremdschlüssels zu erhalten.

0

Beachten Sie, dass Fremdschlüsselbeziehungen aus mehr als einer Spalte bestehen können. Hier ist eine Abfrage, die ich für meine FK Spaltenzuordnung verwenden:

select 
     IS_KCU1.CONSTRAINT_SCHEMA, 
     IS_KCU1.CONSTRAINT_NAME, 
     IS_KCU1.TABLE_SCHEMA FK_TABLE_SCHEMA, 
     IS_KCU1.TABLE_NAME FK_TABLE_NAME, 
     IS_KCU1.COLUMN_NAME FK_COLUMN_NAME, 
     IS_KCU2.TABLE_SCHEMA REFERENCED_TABLE_SCHEMA, 
     IS_KCU2.TABLE_NAME REFERENCED_TABLE_NAME, 
     IS_KCU2.COLUMN_NAME REFERENCED_COLUMN_NAME 
     from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS IS_RC 

     inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE IS_KCU1 
     on IS_KCU1.CONSTRAINT_CATALOG = IS_RC.CONSTRAINT_CATALOG 
     and IS_KCU1.CONSTRAINT_SCHEMA = IS_RC.CONSTRAINT_SCHEMA 
     and IS_KCU1.CONSTRAINT_NAME = IS_RC.CONSTRAINT_NAME 

     inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE IS_KCU2 
     on IS_KCU2.CONSTRAINT_CATALOG = IS_RC.UNIQUE_CONSTRAINT_CATALOG 
     and IS_KCU2.CONSTRAINT_SCHEMA = IS_RC.UNIQUE_CONSTRAINT_SCHEMA 
     and IS_KCU2.CONSTRAINT_NAME = IS_RC.UNIQUE_CONSTRAINT_NAME 
     and IS_KCU2.ORDINAL_POSITION = IS_KCU1.ORDINAL_POSITION