2012-03-09 34 views
10

Ứng dụng của tôi dựa trên db máy chủ sql.Làm cách nào để có được danh sách các trình kích hoạt đang hoạt động trên cơ sở dữ liệu?

Tất cả khách hàng có cùng một db ngoại trừ các tùy chỉnh.

Một số tùy chỉnh bao gồm: bảng mới, bảng điều chỉnh, quan điểm tùy chỉnh, tùy chỉnh kích ...

Khi tôi chạy bản cập nhật phần mềm một số kịch bản được thực thi. Bây giờ tôi vô hiệu hóa trình kích hoạt và bật lại theo cách thủ công sau khi các tập lệnh được thực hiện.

Dù sao tôi muốn tự động vô hiệu hóa tất cả các trình kích hoạt (được kích hoạt, có thể một số trong số chúng có thể đã bị tắt) và sau đó có thể bật lại chúng ở cuối.

Không phát minh lại tiếng la hét, cách thực hiện điều đó?

Làm cách nào để chỉ nhận các trình kích hoạt hoạt động trên db hiện tại?

Khi tôi nhận này tôi lập trình có thể tạo và chạy các

DISABLE TRIGGER triggername ON TABLENAME 

ENABLE TRIGGER triggername ON TABLENAME 
+0

thể trùng lặp của [SQL Server: kiểm tra xem một Trigger là Đã bật hoặc bị tắt?] (Http: // stackoverflow.com/questions/8136937/sql-server-check-dù-a-trigger-is-enabled-hay-disabled) – michaelAngelo

Trả lời

19
select objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled') 

1 có nghĩa là đúng, 0 có nghĩa là sai rõ ràng

truy vấn Sử dụng Jeff O và sửa đổi nó một chút

hoặc thêm nó như là một mệnh đề where.

where TRIG.is_disabled = 0 -- or 1 depends on what you want 
+0

Tôi chọn câu trả lời này ngay cả khi tất cả đều đúng, điều này chỉ đơn giản là "hoàn hảo". – LaBracca

+1

Lưu ý: "Trình kích hoạt cơ sở dữ liệu" không có bảng được liên kết, do đó "parent_id" là 0. Vì vậy, "tham gia bên trong" ở trên sẽ không khớp. Chỉ dành cho người đọc trong tương lai vì đây là câu trả lời được chấp nhận. – granadaCoder

9
SELECT * 
FROM sys.triggers 
WHERE is_disabled = 0 
5
SELECT 
     TAB.name as Table_Name 
    , TRIG.name as Trigger_Name 
FROM [sys].[triggers] as TRIG 
inner join sys.tables as TAB 
on TRIG.parent_id = TAB.object_id 
3
SELECT 
    TAB.name as Table_Name, 
    TRIG.name as Trigger_Name, 
    Comments.Text TriggerText 
FROM [sys].[triggers] as TRIG 
    Inner Join sys.tables as TAB on TRIG.parent_id = TAB.object_id 
    Inner Join syscomments Comments On TRIG.object_id = Comments.id 
WHERE 
    TRIG.is_disabled = 0; 

là giải pháp hoàn chỉnh

2
select * from sys.triggers 

Đây object_id là cho bảng như vậy từ khi tham gia sys.table bạn có thể nhận được bảng tên

0

Dưới đây là các truy vấn xảy ra khi bạn làm làm mới trên "Trình kích hoạt cơ sở dữ liệu" trong SSMS.

SELECT 
tr.name AS [Name], 
'Server[@Name=' + quotename(CAST(
     serverproperty(N'Servername') 
     AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/DdlTrigger[@Name=' + quotename(tr.name,'''') + ']' AS [Urn], 
tr.is_disabled AS [IsEnabled] 
FROM 
sys.triggers AS tr 
WHERE 
(tr.parent_class = 0) 
ORDER BY 
[Name] ASC 

Sử dụng điều đó, tôi đã tạo phiên bản (giúp tăng cường câu trả lời được chấp nhận) để bao gồm trình kích hoạt cơ sở dữ liệu.

Lưu ý việc tham gia bên trái và kiểm tra COALESCE.

SELECT 
     COALESCE(TAB.name, 'DATABASE') as TargetObjectName 
    , TRIG.name as Trigger_Name 
    , TRIG.is_disabled --or objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled') 
    -- select * 
FROM [sys].[triggers] as TRIG 
left join sys.tables as TAB 
on TRIG.parent_id = TAB.object_id 
WHERE 
/* (TRIG.parent_class = 0) and */ 
TRIG.is_disabled = 0 
1
select so.name, text 
from sysobjects so, syscomments sc 
where type = 'TR' 
and so.id = sc.id 
and text like '%related_table_name%' 
+0

Điều này làm việc tuyệt vời cho cơ sở dữ liệu năm 2005 của tôi. Cảm ơn. –

0

// Sử dụng cơ sở dữ liệu của bạn sử dụng [cơ sở dữ liệu Name]

Select * from sys.triggers nơi is_disaabled = 0

+0

Bạn có thể xây dựng câu trả lời của mình không? –

Các vấn đề liên quan