具有多个条件的SQL Server触发器

时间:2018-02-08 12:14:10

标签: sql-server triggers

我正在尝试使用如下所示的两个条件创建SQL Server after insert触发器,但它似乎不起作用。

AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @smstext AS NVARCHAR(1000)
    DECLARE @FromMobile AS NVARCHAR(20)
    DECLARE @InLogID BIGINT
    DECLARE @SMSCTime DATETIME

    IF (SELECT @a = [a], @b = [b], @c = c, @d = d  
        FROM inserted 
        WHERE xyz = 123)
    THEN
        INSERT INTO [table_Staging].[dbo].[table_column1] (E, M, F, G, H) 
        VALUES (@b, @d, @c, RTRIM(LTRIM(@a)), GETDATE());

    IF (SELECT @a = [a], @b = [b], @c = c, @d = d  
        FROM inserted 
        WHERE xyz = 456)
    THEN
        INSERT INTO [table_Staging].[dbo].[table_column2] (E, M, F, G, H) 
        VALUES (@b, @d, @c, RTRIM(LTRIM(@a)), GETDATE());
    ENDIF
 END

1 个答案:

答案 0 :(得分:2)

并不完全清楚你在这里想要完成的事情....你的IF没有做任何比较或任何事情 - 所以它真的没有效果。

我只能猜测 - 如果xyz中存在具有给定Inserted的行,您是否正在尝试检查?此外 - 您正在使用@a和更多变量 - 但这些变量并非定义 ......这真是一个非常混乱的问题!

由于Inserted中确实存在一行,因此无法完成任何操作(不会插入任何行),您可以将此设置为非常简单:

AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    INSERT INTO [table_Staging].[dbo].[table_column1] (E, M, F, G, H) 
        SELECT [b], c, d, RTRIM(LTRIM([a])), SYSDATETIME()
        FROM inserted 
        WHERE xyz = 123

    INSERT INTO [table_Staging].[dbo].[table_column2] (E, M, F, G, H) 
        SELECT [b], c, d, RTRIM(LTRIM([a])), SYSDATETIME()
        FROM inserted 
        WHERE xyz = 456
END