Bir tablo için SQL sunucusunu Tetiklemeyi Etkinleştir'i devre dışı bırakın


128

Aşağıdaki gibi bir işlem oluşturmak istiyorum ancak sözdiziminde hata var. Soruna işaret eden var mı?

Create PROCEDURE [dbo].[my_proc] AS

BEGIN

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

END

** Error Message : Incorrect syntax near 'ENABLE'.

Yanıtlar:


242

bunun yerine aşağıdaki komutları kullanın:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
Bu, SqlServer'ın hangi sürümleri için iyidir? Benim için çalışmıyor iken DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]çalıştı
Maslow

1
Cevabınız doğru. Ama aslında @pang ifadelerinin basit bir düzeltmeye ihtiyacı yok ;! Kullanmayı tercih ederim ENABLE Trigger. 2008'den itibaren tüm SQL Sunucularında geçerlidir.
ABS

Bir veritabanındaki tüm tabloları yapmanız gerekiyorsa şunu kullanın: EXECUTE sp_msforeachtable "ALTER TABLE? TÜMÜNÜ tetiklemeyi devre dışı bırakın" go
John Dyer

72

Önceki satırın bir ile bitmesi gerekir ;çünkü SQL'de DISABLE bir anahtar kelime değildir . Örneğin:

BEGIN
;
DISABLE TRIGGER ...

11
Bu cevabı daha çok tercih ederim. Sorunu giderir ve geçici çözüm yerine çözümü verir. Geçici çözümlerin yeri olsa da, bağlam içermeyen bir geçici çözümü körü körüne takip etmek yerine neden bir hatanın oluştuğunu anlamak önemlidir.
Bpainter

13

Mark'ın bahsettiği gibi, önceki ifade noktalı virgülle bitmelidir. Böylece şunları kullanabilirsiniz:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

TETİKLEMEYİ ETKİNLEŞTİR VEYA TETİKLEMEYİ DEVRE DIŞI BIRAK'ın ardından yeni bir satırda GO yazın, Örnek:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

Tetikleyicileri etkinleştirmek veya devre dışı bırakmak için Dinamik Komut Dosyası aşağıdadır.

select 'alter table '+ (select Schema_name(schema_id) from sys.objects o 
where o.object_id = parent_id) + '.'+object_name(parent_id) + ' ENABLE TRIGGER '+
Name as EnableScript,*
from sys.triggers t 
where is_disabled = 1

0

ENABLE TRIGGER'ı Doğrudan Kaynaktan çalıştırmak istiyorsanız:

böyle yazamayız:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

bunun yerine şunu yazabiliriz:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

Aşağıda en basit yol

Kodu dene

ALTER TRIGGER trigger_name DISABLE

Bu kadar :)


SQL Server> 2008 R2 üzerinde çalışmıyor ve soru MS SQL Server için
kuklei
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.