Tüm Yabancı Anahtarları Devre Dışı Bırakma ve Etkinleştirme
CREATE PROCEDURE pr_Disable_Triggers_v2
@disable BIT = 1
AS
DECLARE @sql VARCHAR(500)
, @tableName VARCHAR(128)
, @tableSchema VARCHAR(128)
-- List of all tables
DECLARE triggerCursor CURSOR FOR
SELECT t.TABLE_NAME AS TableName
, t.TABLE_SCHEMA AS TableSchema
FROM INFORMATION_SCHEMA.TABLES t
ORDER BY t.TABLE_NAME, t.TABLE_SCHEMA
OPEN triggerCursor
FETCH NEXT FROM triggerCursor INTO @tableName, @tableSchema
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
SET @sql = 'ALTER TABLE ' + @tableSchema + '.[' + @tableName + '] '
IF @disable = 1
SET @sql = @sql + ' DISABLE TRIGGER ALL'
ELSE
SET @sql = @sql + ' ENABLE TRIGGER ALL'
PRINT 'Executing Statement - ' + @sql
EXECUTE ( @sql )
FETCH NEXT FROM triggerCursor INTO @tableName, @tableSchema
END
CLOSE triggerCursor
DEALLOCATE triggerCursor
İlk olarak, foreignKeyCursor imleci yabancı anahtarların listesini ve tablo adlarını toplayan SELECT ifadesi olarak bildirilir. Ardından, imleç açılır ve ilk FETCH deyimi yürütülür. Bu FETCH deyimi, ilk satırın verilerini @foreignKeyName ve @tableName yerel değişkenlerine okur. Bir imleç arasında geçiş yaparken, @@ FETCH_STATUS değerinde 0 değerini kontrol edebilirsiniz, bu getirme işleminin başarılı olduğunu gösterir. Bu, döngüün art arda gelen her yabancı anahtarı satır kümesinden alabilmesi için ilerlemeye devam edeceği anlamına gelir. @@ FETCH_STATUS bağlantıdaki tüm imleçler tarafından kullanılabilir. Bu nedenle, birden çok imleç arasında döngü yapıyorsanız, FETCH deyimini hemen takip eden ifadede @@ FETCH_STATUS değerini kontrol etmek önemlidir. @@ FETCH_STATUS, bağlantıdaki en son FETCH işleminin durumunu yansıtır. @@ FETCH_STATUS için geçerli değerler:
0 = FETCH başarılı oldu
-1 = FETCH başarısız oldu
-2 = getirilen satır eksik
Döngünün içinde, kod, yabancı anahtar kısıtlamasını devre dışı bırakma veya etkinleştirme amacına bağlı olarak (CHECK veya NOCHECK anahtar sözcüğünü kullanarak) ALTER TABLE komutunu farklı şekilde oluşturur. İfade daha sonra bir mesaj olarak yazdırılır, böylece ilerlemesi gözlemlenebilir ve ardından ifade yürütülür. Son olarak, tüm satırlar yinelendiğinde, saklı yordam imleci kapatır ve yeniden konumlandırır.
bkz . MSDN Magazine'den Kısıtlamaları ve Tetikleyicileri Devre Dışı Bırakma