kab*_*178 10 sql-server sql-server-2012
我希望married在使用marital_status列上的文本进行插入后触发此触发器,这是我目前所拥有的
ALTER TRIGGER [dbo].[marriage]
ON [dbo].[applicant_personal_info]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF (SELECT [marital_status] FROM inserted) = 'married'
BEGIN
INSERT INTO [dbo].[applicant_marriage_info]([dom])
VALUES('abc')
END
END
Run Code Online (Sandbox Code Playgroud)
db2*_*db2 11
您将在这里遇到的问题来自于 SQL Server 没有 Oracle 具有的“FOR EACH ROW”触发器这一事实。您必须编写触发器来处理多行更改,即 INSERTED 或 DELETED 虚拟表中可以有不止一行。
如果发生这样的更新,您的触发器将失败,因为(SELECT [marital_status] FROM inserted)它将返回多行,并且子查询必须返回单个值以用于直接比较。
触发器可能看起来像这样:
CREATE TRIGGER [dbo].[marriage] ON [dbo].[applicant_personal_info] FOR INSERT
AS
BEGIN
SET NOCOUNT ON
IF EXISTS (SELECT [marital_status] FROM INSERTED WHERE marital_status = 'married')
BEGIN
INSERT INTO [dbo].[applicant_marriage_info] ([dom])
SELECT
'abc' --Replace with whatever you're really inserting
FROM INSERTED
WHERE marital_status = 'married'
END
END
Run Code Online (Sandbox Code Playgroud)
所以这个触发器实际上非常接近你所需要的。现在这里的问题是,如果插入了任何行,那么只有一行会被插入到申请人_婚姻信息中。这是你真正想要的吗?如果一次插入多行会发生什么?
ALTER TRIGGER [dbo].[marriage]
ON [dbo].[applicant_personal_info]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO [dbo].[applicant_marriage_info]([dom])
SELECT 'abc'
FROM inserted
WHERE marital_status = 'married'
END
Run Code Online (Sandbox Code Playgroud)
您可能需要比我显示的更多的列。
| 归档时间: |
|
| 查看次数: |
89729 次 |
| 最近记录: |