Vô hiệu hóa kích hoạt máy chủ SQL kích hoạt cho một bảng


128

Tôi muốn tạo một Proc như bên dưới nhưng nó có lỗi về cú pháp. Bất cứ ai có thể chỉ ra vấn đề?

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

Câu trả lời:


242

sử dụng các lệnh sau thay thế:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
Phiên bản nào của SqlServer này tốt cho? không làm việc cho tôi, trong khi DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]làm việc
Maslow

1
Câu trả lời của bạn là đúng. Nhưng thực sự các câu lệnh @pang không cần bất kỳ sửa chữa nào thay vì đơn giản ;! Tôi thích sử dụng ENABLE Trigger. Nó có thể áp dụng trên tất cả các Máy chủ SQL bắt đầu từ năm 2008
ABS

Nếu bạn cần thực hiện tất cả các bảng trong cơ sở dữ liệu, hãy sử dụng: EXECUTE sp_msforeachtable "ALTER TABLE? Vô hiệu hóa kích hoạt TẤT CẢ" đi
John Dyer

71

Dòng trước cần kết thúc bằng một ;vì trong SQL DISABLE không phải là một từ khóa . Ví dụ:

BEGIN
;
DISABLE TRIGGER ...

10
Tôi rất thích câu trả lời này. Nó giải quyết vấn đề và đưa ra giải pháp thay vì cách giải quyết. Mặc dù cách giải quyết có vị trí của chúng, điều quan trọng là phải hiểu tại sao xảy ra lỗi thay vì mù quáng theo cách giải quyết không có ngữ cảnh.
Bpainter

13

Như Mark đã đề cập, tuyên bố trước đó nên được kết thúc bằng dấu chấm phẩy. Vì vậy, bạn có thể sử dụng:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

Sau TRIGGER ENABLE HOẶC DIIGABLE TRIGGER trong một dòng mới, viết GO, Ví dụ:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

Dưới đây là Tập lệnh động để bật hoặc tắt Trình kích hoạt.

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

nếu bạn muốn thực thi ENABLE TRIGGER trực tiếp từ nguồn:

chúng ta không thể viết như thế này:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

thay vào đó, chúng ta có thể viết:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

Dưới đây là cách đơn giản nhất

Hãy thử mã

ALTER TRIGGER trigger_name DISABLE

Đó là nó :)


Không hoạt động trên SQL Server> 2008 R2 và câu hỏi dành cho MS SQL Server
kuklei
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.