我想在我的新表中插入一行后,将一个带触发器的新行插入到我的新表中,但我希望根据行详细信息/列值为此id添加一个名称。
我正在使用case / then / when命令:
USE [DB1]
GO
/****** Object: Trigger [dbo].[Trigger1] Script Date: 19/07/2017 15:16:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Trigger1]
ON [SourceTable]
AFTER INSERT
AS
insert into [dbo].[DestinationTable] ([ID],[NAME]) (select id, name = CASE
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
END
FROM SourceTable WITH (NOLOCK) WHERE ID=@@identity)
失败了......
答案 0 :(得分:2)
您需要从Inserted
伪表中进行选择,该伪表包括所有行(它可以并且也将是多行!),这些行是通过触发此触发器的操作插入的:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Trigger1]
ON [SourceTable]
AFTER INSERT
AS
INSERT INTO [dbo].[DestinationTable] ([ID], [NAME])
SELECT
i.ID,
CASE
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
END
FROM
Inserted i
答案 1 :(得分:1)
就像marc_s在评论中说的那样,你只需要从Inserted
表中选择。它包含在SourceTable中插入的所有新行。
ALTER TRIGGER [dbo].[Trigger1]
ON [SourceTable]
AFTER INSERT
AS
BEGIN
insert into [dbo].[DestinationTable] ([ID],[NAME])
select id, name = CASE
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
WHEN XXXX THEN '*****'
END
FROM inserted
END