Foreign Keys com SMO #2

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;
}

 

por Vitor Silva



Leave a Reply