数据库在创建具有特定名称的表时触发

问题描述 投票:0回答:1

我已经审查(并尝试使用)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 triggers sql-server-2008-r2 ssms
1个回答
0
投票

我不确定在 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
© www.soinside.com 2019 - 2024. All rights reserved.