2016-09-20 83 views
1

我正在創建一個表,我可以用它來覆蓋觸發器執行(所以,根據數據庫值單獨打開和關閉它們)。我有興趣通過使用表名和觸發器名稱來解決多個觸發器問題,這導致我感興趣的問題;是否有可能在觸發器的執行過程中獲得關於觸發器的信息,例如其名稱和執行的表格?是否可以在觸發器執行過程中獲取有關觸發器的信息?

+1

請爲您的數據庫系統添加標籤。觸發器是高度產品特定的。 [tag:sql]是指標準的SQL語言,而不是特定的產品。 –

+2

但是我會補充說,在我知道的大多數數據庫系統中,沒有真正的方法來編寫一個「通用」觸發器 - 每個觸發器都必須針對它將應用的每個表進行自定義,所以通常不需要執行任何操作運行時發現,因爲您可以在爲每個表進行自定義時應用進一步的自定義。 –

回答

2

在SQL Server中,您可以使用@@ PROCID和OBJECT_NAME函數來獲取正在執行的觸發器(或存儲過程)的名稱。例如:

CREATE TABLE MyTable (SomeColumn INT) 

GO 
CREATE TRIGGER MyTrigger ON dbo.MyTable 
FOR INSERT 
AS 
PRINT OBJECT_NAME(@@PROCID) 
DECLARE @TableName sysname 
SET @TableName=(SELECT OBJECT_NAME(parent_object_id) FROM sys.objects WHERE [email protected]@PROCID) 
PRINT @TableName 

GO 
INSERT INTO dbo.MyTable (SomeColumn) VALUES (1) 
+1

但正如我所說,沒有辦法寫這個觸發器,以便它適用於多個表。所以如果你是例如通過動態SQL生成多個觸發器,您可以在觸發器主體內的「MyTrigger」和「MyTable」值內插入CREATE TRIGGER行。 –

相關問題