Sql-Server
使用變數 Select 和 Order by 觸發
有沒有辦法設置觸發器,一旦創建新表就會啟動並獲取新表名稱?我能夠提出下面的查詢,但它只能按字母順序而不是按創建日期獲取第一個查詢
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
你不看
sys.tables
那個……即使你創建了最後一個,在一個繁忙的系統上,你怎麼知道其他人最近沒有創建一個?隨之TOP
而來ORDER BY
的是,以下方法可能在大多數情況下都有效,但這是一個完全壞主意:SELECT TOP (1) @table = name FROM sys.tables ORDER BY create_date DESC;
不,相反,您需要從以下位置提取表名
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