Триггер SQL для вставки строки в таблицу B, если столбец в таблице A имеет определенное значение - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь создать триггер, когда у пользователя есть определенный вид электронной почты, чтобы поместить его в правильную группу безопасности.У меня есть оператор 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

Он вставляет пользователя в таблицу пользователей, но ничего не делает в таблице групп пользователей.Он должен вставляться в строки в группе пользователей следующим образом.

       +----+-----------+---------+
       | ID | userid    | groupid |
       +----+-----------+---------+
       |  1 | 001       |   3     |
       |  2 | 002       |   3     |
       |  3 | 003       |   3     |
       +----+----------+----------+

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вам нужно отладить ваш триггер.

Попробуйте это:

Как отлаживать триггер T-SQL?

  1. Создайте свой триггер и некоторые тестовые данные в одном окне (для настройки)

  2. Откройте новое окно запроса и введите свой «вставить». НЕ нажмите "Беги".

  3. Установить точку останова на этой линии

  4. Запустить отладчик (отладка из меню или панели инструментов или Alt-F5)

  5. Нажмите на курок (F11)

0 голосов
/ 17 мая 2018

Вы делаете критическую ошибку, предполагая, что 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%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...