2012-11-26 33 views
0

我已經爲每個表插入,更新,刪除觸發器來記錄操作。 我正在檢索數據從刪除,插入和包裝到XML的前後。 但是有些日誌無法顯示並更新值。 我的SQL語句是:如何獲取觸發器中的sql語句

USE [cop] 

GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[Delete] ON [dbo].[Seanslar] 
    AFTER DELETE 
AS 
BEGIN 

SET NOCOUNT ON 

DECLARE @deleted AS XML 
SET @deleted = (select * from deleted for xml AUTO, ELEMENTS XSINIL) 

DECLARE @logIslem TINYINT 
SET @logIslem = 3 

DECLARE @tableName VARCHAR(200) 
SELECT @tableName = OBJECT_SCHEMA_NAME(parent_id) + '.' + OBJECT_NAME(parent_id) 
    FROM sys.triggers 
WHERE object_id = @@PROCID 

DECLARE @xmlToChar NVARCHAR(MAX) 
SET @xmlToChar = CAST(@deleted AS nvarchar(MAX)) 

IF LEN(@xmlToChar)<10 
BEGIN 
    IF EXISTS(select * from deleted) 
     select @xmlToChar = CAST(seans_id AS NVARCHAR(MAX)) from deleted 
    ELSE 
     SET @xmlToChar = 'Deleted is empty!' 
END 

DECLARE @allXml AS XML 
SET @allXml = '<'[email protected]+'>'+ @xmlToChar +'</'[email protected]+'>' 

INSERT INTO [dbo].[Logla] 
    ([logIslem], [trgKullanici_id], [tabloAdi], [logXml])  
VALUES   
    (@logIslem, SUSER_NAME(), @tableName, @allXml) 

    END 

是否有任何的方式來學習內觸發執行「SQL語句」?

回答

0

沒有實際的方法來捕獲該語句觸發的觸發器內部的正在執行的SQL語句文本。

您可以用DDL(元數據)觸發做到這一點,但不是DML(正常)觸發。


是的,有一個或兩個非常不切實際的方式來做到這一點,但我真的不建議他們,除非:

  1. 你是非常,非常SQL精通,和
  2. 你真的,真的需要它,
  3. 你能承受大量的開發和測試時間
相關問題