我正在尝试为用户提供某种类型的电子邮件以将用户置于正确的安全组中时创建触发器。我有一个if语句检查他们的电子邮件,但似乎它忽略了它。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [test].[UpdateSecurityGroup] ON [test].[user]
AFTER INSERT AS begin
SET NOCOUNT ON;
declare @insertedUseremail varchar;
select @insertedUseremail = inserted.email from inserted;
declare @insertedUserid int = 0;
select @insertedUserid = inserted.id from inserted;
if (@insertedUseremail like '%@test1.ca%' OR @insertedUseremail like '%@test2.ca%' OR @insertedUseremail like '%@test3.ca%' OR @insertedUseremail like '%@test4.ca%')
BEGIN
Insert into [test].[usergroup](userid,groupid) Values(@insertedUserid, 3)
END
end
它将用户插入用户表,但在usergroup表中不执行任何操作。 它应该像这样插入用户组中的行。
+----+-----------+---------+
| ID | userid | groupid |
+----+-----------+---------+
| 1 | 001 | 3 |
| 2 | 002 | 3 |
| 3 | 003 | 3 |
+----+----------+----------+
答案 0 :(得分:2)
假设inserted
包含单行,您犯了一个严重的错误。不不不。这不是要走的路。
alter trigger [test].[UpdateSecurityGroup] on [test].[user] after insert as
begin
set nocount on;
insert into [test].[usergroup](userid, groupid)
select i.id, 3
from inserted i
where i.email like '%@test1.ca%' OR
i.email like '%@test2.ca%' OR
i.email like '%@test3.ca%' OR
i.email like '%@test4.ca%'
end;
如果您的电子邮件真的如此,则可以将where
缩短为where i.email like '%@test[1234].ca%
。
答案 1 :(得分:0)
您需要调试触发器。
试试这个:
在一个窗口中创建触发器和一些测试数据(进行设置)
打开一个新的查询窗口,然后输入" insert"。 NOT 点击"运行"爱好。
在该行设置断点
启动调试器(从菜单或工具栏调试或Alt-F5)
- 醇>
进入触发器(F11)