Wednesday, October 30, 2013

sql server drop foreign keys / Fremdschluessel loeschen

wenn man tabellen löschen will, erhält man oft die meldung:
cannot ... because it is being referenced by a FOREIGN KEY constraint

hier ein select zum generieren von alter table statements  um alle foreign keys der datenbank zu löschen:

select 'alter table ['+t.name + '] drop constraint ['+k.name +']' as keyname from sys.foreign_keys k join sys.tables t on t.object_id=k.parent_object_id

wenn man nur daten  im "bulk modus" (also ganze tabellen kopieren) einfügen will, genügt es vorübergehend die constraints zu disabeln:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

und dann wieder einzuschalten:
exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"



when droping tables or deleting rows you often get:
cannot ... because it is being referenced by a FOREIGN KEY constraint

this select generates alter table statements to delete all foreign key in a database:

select 'alter table ['+t.name + '] drop constraint '+k.name as keyname from sys.foreign_keys k join sys.tables t on t.object_id=k.parent_object_id

if you just want to copy tables, its enough to disable constraints:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

and after coping data enable again:
exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

No comments: