‚CASCADE CONSTRAINTS‘ auf dem SQL-Server

Der SQL-Server beherrscht das praktische „DROP TABLE <TABLE_NAME> CASCADE CONSTRAINTS‘ leider nicht.

Also muss man sich die Constraints selber zusammen suchen, und einzeln droppen.

Das folgende kleine T-SQL-Snippet tut das:

-- <DATENBANK> und <TABELLE> durch die eigenen Werte ersetzen:
-- <DATENBANK> ist die eigene Datenbank
-- <TABELLE> die Tabelle, zu der alle Fremdschlüssel gelöscht werden sollen, die auf sie verweisen.
DECLARE @database nvarchar(50)
DECLARE @table nvarchar(50)

set @database = '<DATENBANK>'
set @table = '<TABELLE>'

DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc, 
 INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk 
 where rc.CONSTRAINT_CATALOG = pk.CONSTRAINT_CATALOG 
 and rc.UNIQUE_CONSTRAINT_NAME = pk.CONSTRAINT_NAME 
 and rc.CONSTRAINT_CATALOG = @database 
 and pk.TABLE_NAME = @table)
BEGIN
 select @sql = 'ALTER TABLE ' + fk.TABLE_NAME + ' DROP CONSTRAINT ' + rc.CONSTRAINT_NAME 
 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS fk, 
 INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc, 
 INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk 
 where fk.CONSTRAINT_NAME = rc.CONSTRAINT_NAME 
 and fk.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG
 and rc.CONSTRAINT_CATALOG = pk.CONSTRAINT_CATALOG 
 and rc.UNIQUE_CONSTRAINT_NAME = pk.CONSTRAINT_NAME 
 and rc.CONSTRAINT_CATALOG = @database 
 and pk.TABLE_NAME = @table;
 exec sp_executesql @sql
END
GO