我正在尝试使用如下所示的两个条件创建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
答案 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