CREATE PROC fk_disable_enable_sp @mode char(8)
AS
BEGIN
DECLARE @tblname sysname, @constraintname sysname, @execstr varchar(8000)
DECLARE fk_cur CURSOR FOR
SELECT '[' + table_name + ']' ,constraint_name
FROM information_schema.constraint_table_usage
WHERE lower(substring (constraint_name,1,2)) = 'fk'
OPEN fk_cur
FETCH fk_cur INTO @tblname, @constraintname
WHILE (@@fetch_status = 0)
BEGIN
SET @execstr = 'alter TABLE ' + @tblname + ' ' + @mode + ' CONSTRAINT ' + @constraintname
PRINT (@execstr)
EXEC (@execstr)
FETCH fk_cur INTO @tblname, @constraintname
END
CLOSE fk_cur
DEALLOCATE fk_cur
end
go
----Τρόπος κλήσης της sp
---Για να κάνουμε disable τα FK
exec fk_disable_enable_sp 'nocheck'
---Για να κάνουμε enable τα FK
exec fk_disable_enable_sp 'check'
Βέβαια χρειάζεται προσοχή στην χρήση τις παραπάνω sp .Ειδικα όταν ένας administrator θέλει να την χρησιμοποιήσει δέν πρέπει να υπάρχουν ενεργοί χρήστες στην εφαρμογή που χρησιμοποιεί την βάση.
Ο λόγως δημιουργίας αυτής της sp είναι για λόγους maintanance από τον administrator .