Menonaktifkan dan Mengaktifkan Semua Kunci Asing
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
Pertama, kursor foreignKeyCursor dideklarasikan sebagai pernyataan SELECT yang mengumpulkan daftar kunci asing dan nama tabelnya. Selanjutnya, kursor dibuka dan pernyataan FETCH awal dieksekusi. Pernyataan FETCH ini akan membaca data baris pertama ke dalam variabel lokal @foreignKeyName dan @tableName. Saat memutar melalui kursor, Anda dapat memeriksa @@ FETCH_STATUS untuk nilai 0, yang menunjukkan bahwa pengambilan berhasil. Ini berarti loop akan terus bergerak maju sehingga bisa mendapatkan setiap kunci asing berturut-turut dari rowset. @@ FETCH_STATUS tersedia untuk semua kursor pada koneksi. Jadi jika Anda mengulangi beberapa kursor, penting untuk memeriksa nilai @@ FETCH_STATUS dalam pernyataan segera setelah pernyataan FETCH. @@ FETCH_STATUS akan mencerminkan status untuk operasi FETCH terbaru pada koneksi. Nilai yang valid untuk @@ FETCH_STATUS adalah:
0 = FETCH berhasil
-1 = FETCH tidak berhasil
-2 = baris yang diambil tidak ada
Di dalam loop, kode membuat perintah ALTER TABLE berbeda tergantung pada apakah niatnya untuk menonaktifkan atau mengaktifkan batasan kunci asing (menggunakan kata kunci PERIKSA atau NOCHECK). Pernyataan tersebut kemudian dicetak sebagai pesan sehingga kemajuannya dapat diamati dan kemudian pernyataan tersebut dieksekusi. Akhirnya, ketika semua baris telah diulangi, prosedur yang disimpan menutup dan mendelokasi kursor.
lihat Menonaktifkan Batasan dan Pemicu dari Majalah MSDN