
[dbo].[AL_TOGGLE_CONSTRAINTS]
CREATE PROCEDURE [dbo].[AL_TOGGLE_CONSTRAINTS]
@P_OBJECT NVARCHAR(10),
@P_MODE NVARCHAR(20)
AS
BEGIN
SET NOCOUNT ON
IF @P_MODE NOT IN ('ENABLE', 'DISABLE')
RAISERROR 50000 'MODE needs to be either ENABLE or DISABLE'
IF @P_OBJECT NOT IN ('ALL', 'TRG', 'FK')
RAISERROR 50000 'OBJECT needs to be either ALL, TRG or FK'
DECLARE
@V_TABLE_NAME NVARCHAR(40),
@V_FK_NAME NVARCHAR(40)
DECLARE C_TRIGGERS CURSOR FOR
SELECT DISTINCT S2.NAME TABLE_NAME
FROM SYSOBJECTS S1, SYSOBJECTS S2
WHERE S1.TYPE = 'TR' AND S1.PARENT_OBJ = S2.ID
DECLARE C_FKS CURSOR FOR
SELECT S2.NAME TABLE_NAME, S1.NAME FK_NAME
FROM SYSOBJECTS S1, SYSOBJECTS S2
WHERE S1.TYPE = 'F' AND S1.PARENT_OBJ = S2.ID
IF @P_OBJECT IN ('ALL', 'TRG')
BEGIN
OPEN C_TRIGGERS
FETCH NEXT FROM C_TRIGGERS INTO @V_TABLE_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('ALTER TABLE ' + @V_TABLE_NAME + ' ' + @P_MODE + ' TRIGGER ALL')
FETCH NEXT FROM C_TRIGGERS INTO @V_TABLE_NAME
END
CLOSE C_TRIGGERS
END
IF @P_OBJECT IN ('ALL', 'FK')
BEGIN
IF @P_MODE = 'ENABLE'
SELECT @P_MODE = 'WITH CHECK CHECK'
ELSE
SELECT @P_MODE = 'NOCHECK'
OPEN C_FKS
FETCH NEXT FROM C_FKS INTO @V_TABLE_NAME, @V_FK_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('ALTER TABLE ' + @V_TABLE_NAME + ' ' + @P_MODE + ' CONSTRAINT ' + '"' + @V_FK_NAME + '"')
FETCH NEXT FROM C_FKS INTO @V_TABLE_NAME, @V_FK_NAME
END
CLOSE C_FKS
END
DEALLOCATE C_TRIGGERS
DEALLOCATE C_FKS
SET NOCOUNT OFF
END
GO