我想知道如何查看回滚对象?

时间:2017-07-26 07:38:52

标签: sql-server

我为create table创建了ddl触发器,在该触发器中我也进行了回滚。现在,我如何查看试图创建的表?

3 个答案:

答案 0 :(得分:0)

简短的回答是:你不能。

一旦回滚了表的创建,该表就不再存在于数据库中。

您需要从触发器中删除回滚,让触发器创建表,查看表然后回滚。

答案 1 :(得分:0)

在回滚之前,您可以使用日志记录来检查尝试创建的表。 处理异常,如果发生任何异常,请记录详细信息并回滚。

答案 2 :(得分:0)

您可以在回滚后从触发器将其记录到表中。 这是一个例子:

CREATE TABLE dbo.AuditDDLEvents
(
  id               INT      NOT NULL IDENTITY,
  posttime         DATETIME  ,
  eventtype        sysname  ,
  loginname        sysname  ,
  schemaname       sysname  ,
  objectname       sysname  ,
  CONSTRAINT PK_AuditDDLEvents PRIMARY KEY(id)
);
go

CREATE TRIGGER [trg_create_tbl] ON DATABASE FOR CREATE_TABLE
AS
SET NOCOUNT ON;
DECLARE @eventdata AS XML = eventdata();


ROLLBACK

INSERT INTO dbo.AuditDDLEvents(
  posttime, eventtype, loginname, schemaname, objectname)
  VALUES( @eventdata.value('(/EVENT_INSTANCE/PostTime)[1]',         'VARCHAR(23)'),
          @eventdata.value('(/EVENT_INSTANCE/EventType)[1]',        'sysname'),
          @eventdata.value('(/EVENT_INSTANCE/LoginName)[1]',        'sysname'),
          @eventdata.value('(/EVENT_INSTANCE/SchemaName)[1]',       'sysname'),          
          @eventdata.value('(/EVENT_INSTANCE/ObjectName)[1]',       'sysname')
          );

现在尝试创建一个表,它将在触发器中结束,但执行

select *
from dbo.AuditDDLEvents;

您将获得有关表名的人员,时间和内容的所有信息