我已经审查(并尝试使用)SQL Server 2008 trigger on create table但没有成功。我目前将一个 CSV 文件上传到一个名为
DataTMP
的表中。使用存储过程将此文件中的数据 ETL 到另一个表中,之后删除DataTMP
表。
我想要实现的是,当创建
DataTMP
时,它的创建会触发存储过程的执行,并在成功执行后删除DataTMP
表。
我试过的是:
CREATE OR REPLACE TRIGGER trig_DataUpsert
AFTER CREATE ON SCHEMA
BEGIN
EXEC usp_data_ETL
DROP TABLE DataTMP
END
在触发器 CREATE 语句中,错误提示为“OR”并再次提示为“ON”
我正在使用 SSMS v18
我不确定在 SQL Server 2008 上,我没有要测试的实例,但据我所知,当时也有 DDL 触发器。
请试试这个,或者适应你的情况:
--DROP TRIGGER IF EXISTS trig_DataUpsert ON DATABASE
-- alternative for SQL Server 2008, as IF EXISTS wouldn't have been available back then
IF EXISTS (SELECT 1 FROM sys.triggers WHERE [name] = N'trig_DataUpsert' AND [type] = 'TR')
DROP TRIGGER trig_DataUpsert ON DATABASE
GO
CREATE TRIGGER trig_DataUpsert
ON DATABASE
FOR CREATE_TABLE
AS
DECLARE @tblName NVARCHAR(MAX)
SELECT @tblName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)')
IF @tblName = N'DataTMP'
BEGIN
PRINT 'EXEC usp_data_ETL'
DROP TABLE DataTMP
END
ELSE
RETURN