Как мне удалить все ограничения внешнего ключа в таблице в SQL Server 2000 с помощью T-SQL?
Как удалить все ограничения внешнего ключа в таблице на Sql Server 2000?
Ответ 1
Если здесь просто отключить ограничения, вы можете использовать:
ALTER TABLE myTable NOCHECK CONSTRAINT all
то вы можете переключить их обратно, просто используя:
ALTER TABLE myTable WITH CHECK CHECK CONSTRAINT all
Если вы хотите отключить ограничения во всех таблицах, вы можете использовать:
-- disable all constraints
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
-- enable all constraints
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Больше в вопросе: Могут ли ограничения внешнего ключа быть временно отключен с помощью TSQL?
Но если вам нужно постоянно налагать ограничения, вы можете использовать этот script, размещенный на databasejurnal.com.
Просто слегка измените его, чтобы удалить только внешние ключи
create proc sp_drop_fk_constraints
@tablename sysname
as
-- credit to: douglas bass
set nocount on
declare @constname sysname,
@cmd varchar(1024)
declare curs_constraints cursor for
select name
from sysobjects
where xtype in ('F')
and (status & 64) = 0
and parent_obj = object_id(@tablename)
open curs_constraints
fetch next from curs_constraints into @constname
while (@@fetch_status = 0)
begin
select @cmd = 'ALTER TABLE ' + @tablename + ' DROP CONSTRAINT ' + @constname
exec(@cmd)
fetch next from curs_constraints into @constname
end
close curs_constraints
deallocate curs_constraints
return 0
Ответ 2
Здесь вы идете: (не тестировалось на SQL2000, но должно быть хорошо)
Генерирует "отключает":
SELECT 'IF EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N''[dbo].' + FK +''')
AND parent_object_id = OBJECT_ID(N''[dbo].' + PT + '''))
ALTER TABLE ' + PT + ' NOCHECK CONSTRAINT ' + FK + ';'
FROM
(SELECT
OBJECT_NAME(constraint_object_id) as FK,
OBJECT_NAME(parent_object_id) as PT
FROM [sys].[foreign_key_columns] ) T
ORDER BY FK
Генерирует 'enable':
SELECT 'ALTER TABLE ' + PT + ' WITH CHECK CHECK CONSTRAINT ' + FK + ';'
FROM
(SELECT
OBJECT_NAME(constraint_object_id) as FK,
OBJECT_NAME(parent_object_id) as PT
FROM [sys].[foreign_key_columns] ) T
ORDER BY FK
Обновление: К сожалению, я думал, что вы хотите его для всех таблиц:) Вы можете просто изменить выше для своей отдельной таблицы.
Ответ 3
Я думаю, вы обнаружите, что нет простого способа сбросить ограничения на таблицу в SQL Server 2000. Тем не менее, есть много людей, которые имеют письменные сценарии, которые могут идентифицировать и удалять/отключать/воссоздавать ограничения внешнего ключа, Например, http://www.mssqltips.com/tip.asp?tip=1376 - но я не тестировал его на SQL Server 2000.
EDIT: Вот еще один пример, который генерирует вам сценарии drop/create.