Dzięki wykorzystaniu SMO (jeśli nie wiesz co to – przeczytaj wpis pt.:"Jak DataSet’a przenieść do MsSQL'a? (SQLServer Management Objects i SqlBulkCopy)") można w prosty sposób wykonywać wiele operacji na bazie danych Ms SQL. Jedną z takich operacji może być usuwanie elementów bazy danych. W większości przypadków wystarczy na wybranym elemencie z bazy danych wykonać proste Drop, jednak nie zawsze musi się to udać.
Taki przypadek może mieć właśnie miejsce z tabelami. Załóżmy, że chcemy usunąć wybraną tabelę z dostępnej bazy danych. Zwykle taka tabela nie istnieje „sama dla siebie”, zgromadzone w niej dane powiązane są z danymi w innych tabelach. Jest to realizowane przez klucze obce, dlatego przed usunięciem tabeli konieczne jest wszystkich kluczy obcych odwołujących się do tej tabeli.
Powyższe stwierdzenie, jak również poniższy kod, nie są odkrywcze, ale może komuś się przyda...
/// <summary> /// It removes all foreign keys that reference the table to be dropped /// and then drops the table. /// </summary> /// <param name="MyDataBase">The database object (SMO)</param> /// <param name="TableName">Name of the table to be dropped.</param> /// <param name="SchemaName">Name of the schema that includes the table to be dropped.</param> private static void DropTable( Database MyDataBase, string TableName, string SchemaName ) { if ( MyDataBase.Tables.Contains( TableName ) ) { foreach ( Table t in MyDataBase.Tables ) { ForeignKey[] fkArray = new ForeignKey[ t.ForeignKeys.Count ]; t.ForeignKeys.CopyTo( fkArray, 0 ); foreach ( ForeignKey fk in fkArray ) if ( fk.ReferencedTable == TableName && ( fk.ReferencedTableSchema == SchemaName || string.IsNullOrEmpty( SchemaName ) ) ) fk.Drop(); } MyDataBase.Tables[ TableName ].Drop(); } }
Brak komentarzy:
Prześlij komentarz