ปิดการใช้งานเปิดใช้งาน Trigger SQL server สำหรับตาราง


128

ฉันต้องการสร้างหนึ่ง proc เหมือนด้านล่าง แต่มีข้อผิดพลาดเกี่ยวกับไวยากรณ์ ใครช่วยชี้ปัญหา

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
คำตอบของคุณถูกต้อง แต่จริงๆแล้วงบ @pang ไม่ต้องการการแก้ไขใด ๆ แทนที่จะง่าย;! ENABLE Triggerฉันชอบที่จะใช้ ใช้ได้กับ SQL Server ทั้งหมดตั้งแต่ปี 2008
ABS

หากคุณต้องการทำตารางทั้งหมดในฐานข้อมูลให้ใช้สิ่งนี้: EXECUTE sp_msforeachtable "ALTER TABLE? disabled trigger ALL" ไป
John Dyer

72

สายก่อนที่จะตอบสนองความต้องการที่จะจบลงด้วย;เพราะใน SQL ไม่ได้เป็นคำหลักที่DISABLE ตัวอย่างเช่น:

BEGIN
;
DISABLE TRIGGER ...

11
ฉันชอบคำตอบนี้มาก เป็นการแก้ไขปัญหาและให้วิธีแก้ปัญหาแทนการแก้ปัญหาชั่วคราว แม้ว่าวิธีแก้ปัญหาจะมีที่มา แต่สิ่งสำคัญคือต้องเข้าใจว่าเหตุใดจึงเกิดข้อผิดพลาดแทนที่จะทำตามวิธีแก้ปัญหาแบบสุ่มสี่สุ่มห้าโดยไม่มีบริบท
Bpainter

13

ดังที่ Mark กล่าวไว้คำสั่งก่อนหน้าควรจะจบลงด้วยเครื่องหมายอัฒภาค ดังนั้นคุณสามารถใช้:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

หลังจาก ENABLE TRIGGER หรือ DISABLE TRIGGER ในบรรทัดใหม่ให้เขียน 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

ด้านล่างนี้คือ Dynamic Script เพื่อเปิดหรือปิดใช้งาน Triggers

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 Directly From Source:

เราเขียนแบบนี้ไม่ได้:

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 Server
kuklei
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.