我为create table
创建了ddl触发器,在该触发器中我也进行了回滚。现在,我如何查看试图创建的表?
答案 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;
您将获得有关表名的人员,时间和内容的所有信息