Objectivo: Determinar o nome da tabela que está a ser referenciada a partir de uma chave externa
Ferramentas: SQL Server Management Objects (SMO)
Principais objectos e propriedades: Table, Table.ForeignKeys, Column, ForeignKey, ForeignKeyColumn
Notas:
- chave primária e foreign key não composta
Código
private static string GetReferencedKeyColumnName(Database database, Table table, Column column)
{
Column c2 = new Column();
bool exists = false;
string referencedKey = "";
database.Refresh();
foreach (ForeignKey ffk in table.ForeignKeys)
{
foreach (ForeignKeyColumn fc in ffk.Columns)
{
c2 = table.Columns[fc.Name];
if (c2.Equals(column))
{
database.Tables[ffk.ReferencedTable].Refresh();
database.Tables[ffk.ReferencedTable].Indexes.Refresh();
Index idx = database.Tables[ffk.ReferencedTable].Indexes[ffk.ReferencedKey];
if (idx == null) idx = database.Tables[ffk.ReferencedTable].Indexes["[" + ffk.ReferencedKey + "]"];
if (idx != null)
referencedKey += idx.IndexedColumns[0].Name;
exists = true;
break;
}
}
if (exists)
{
break; // not considering composite FK
}
}
return referencedKey;
}
Deixe um comentário