Rox*_*afa 1 trigger sql-server table
有没有办法设置触发器,它会在创建新表后激活并获取新表名称?我能够提出下面的查询,但它只能按字母顺序获取第一个查询,而不是按创建日期
CREATE TRIGGER CreateTable
ON DATABASE
FOR CREATE_TABLE
AS
DECLARE
@table varchar(max);
SELECT top 1 @table = [name] FROM sys.tables
insert into NewTable values(@table)
;
end
Run Code Online (Sandbox Code Playgroud)
你不注意sys.tables那个......即使你创建了最后一个,在一个繁忙的系统上,你怎么知道其他人最近没有创建一个?随着TOP来,ORDER BY所以下面的大部分时间可能会起作用,但这是一个完全坏的主意:
SELECT TOP (1) @table = name FROM sys.tables ORDER BY create_date DESC;
Run Code Online (Sandbox Code Playgroud)
不,相反,您需要从EVENTDATA()以下位置提取表名:
CREATE TRIGGER CreateTable
ON DATABASE
FOR CREATE_TABLE
AS
BEGIN
DECLARE
@sql nvarchar(MAX),
@EventData xml = EVENTDATA();
;WITH x(s,o)
AS
(
SELECT
@EventData.value('(/EVENT_INSTANCE/SchemaName)[1]', 'nvarchar(128)'),
@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(128)')
)
INSERT dbo.NewTable(ColumnName)
SELECT QUOTENAME(s) + N'.' + QUOTENAME(o)
FROM x;
END
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |