तालिका के लिए ट्रिगर SQL सर्वर सक्षम करें


128

मैं नीचे की तरह एक खरीद बनाना चाहता हूं, लेकिन इसमें सिंटैक्स पर त्रुटि है। किसी को भी समस्या की ओर इशारा कर सकता है?

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'.

जवाबों:


242

इसके बजाय निम्नलिखित कमांड का उपयोग करें:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
SqlServer के किन संस्करणों के लिए यह अच्छा है? मेरे लिए काम नहीं कर रहा है, जबकि DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]काम किया है
Maslow

1
आपका उत्तर सही है। लेकिन वास्तव में @ पंग के बयानों को एक साधारण के बजाय किसी भी फिक्स की आवश्यकता नहीं है ;! मैं उपयोग करना पसंद करता हूं ENABLE Trigger। यह 2008 से शुरू होने वाले सभी SQL सर्वरों पर लागू है।
ABS

यदि आपको डेटाबेस के सभी तालिकाओं का उपयोग करने की आवश्यकता है: EXECUTE sp_msforeachtable "ALTER TABLE? अक्षम ट्रिगर सभी" जाओ
जॉन डायर

71

;SQL में किसी कारण से समाप्त होने से पहले की लाइन DISABLE एक कीवर्ड नहीं है । उदाहरण के लिए:

BEGIN
;
DISABLE TRIGGER ...

10
मैं इस जवाब को बहुत पसंद करता हूं। यह समस्या को हल करता है और समाधान के बजाय समाधान देता है। जबकि वर्कअराउंड में अपना स्थान होता है, यह समझना महत्वपूर्ण है कि बिना किसी संदर्भ के वर्कअराउंड के बाद नेत्रहीन रूप से त्रुटि क्यों हुई।
Bpainter

13

जैसा कि मार्क ने उल्लेख किया है, पिछले बयान को अर्द्ध-उपनिवेश में समाप्त किया जाना चाहिए। तो आप उपयोग कर सकते हैं:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

एक नई पंक्ति में सक्षम ट्राइगर या डिसेबल ट्राइगर के बाद GO, उदाहरण लिखें:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

नीचे ट्रिगर्स को सक्षम या अक्षम करने के लिए डायनामिक स्क्रिप्ट है।

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

यदि आप स्रोत से प्रत्यक्ष ट्रैगर को निष्पादित करना चाहते हैं:

हम इस तरह नहीं लिख सकते हैं:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

इसके बजाय, हम लिख सकते हैं:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

नीचे सबसे सरल तरीका है

कोड का प्रयास करें

ALTER TRIGGER trigger_name DISABLE

बस :)


SQL Server> 2008 R2 पर काम नहीं कर रहा है और सवाल MS SQL सर्वर के लिए है
kuklei
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.