2012-11-26 95 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. 你能承受大量的开发和测试时间
相关问题