updateing all Foreign key constraint in sql server? -
i have database in sql server 2008 r2 have many table (over 200) , have many relation betweens tables. delete rule in of relations no action need update relation delete rule cascade @ once because of many relation in database dont want 1 one there way ?
typically, when alter foreign key constraint, using ssms gui, sql server on background drops , recreates same.
here script, generate sql dropping fkeys , recreating them on update cascade on delete cascade options
assumption is, fkeys name "fk....."
set nocount on; declare @objects table ( id int identity(1,1), tablename sysname, schemaname sysname ) insert @objects (tablename, schemaname) select table_name, constraint_schema information_schema.key_column_usage constraint_name 'fk%' declare @min int, @max int,@table sysname,@schema sysname select @min = 1, @max = max(id) @objects while @min <=@max begin select @table = tablename,@schema = schemaname @objects id = @min print '/*drop foreign key statements [' + @schema + '].[' + @table + ']*/' select 'alter table [' + schema_name(o.schema_id) + '].[' + o.name + '] drop constraint [' + fk.name + ']' sys.foreign_keys fk inner join sys.objects o on fk.parent_object_id = o.object_id o.name = @table , schema_name(o.schema_id) = @schema print '/*create foreign key statements [' + @schema + '].[' + @table + ']*/' select 'alter table [' + schema_name(o.schema_id) + '].[' + o.name + '] add constraint [' + fk.name + '] foreign key ([' + c.name + ']) references [' + schema_name(refob.schema_id) + '].[' + refob.name + '] ([' + refcol.name + '])on update cascade on delete cascade' sys.foreign_key_columns fkc inner join sys.foreign_keys fk on fkc.constraint_object_id = fk.object_id inner join sys.objects o on fk.parent_object_id = o.object_id inner join sys.columns c on fkc.parent_column_id = c.column_id , o.object_id = c.object_id inner join sys.objects refob on fkc.referenced_object_id = refob.object_id inner join sys.columns refcol on fkc.referenced_column_id = refcol.column_id , fkc.referenced_object_id = refcol.object_id o.name = @table , schema_name(o.schema_id) = @schema set @min = @min+1 end hope helps.
raj
ps: setting query output text helps. please read comment posted on question. arbitrarily setting cascade may not right thing
Comments
Post a Comment