Как мне сделать это в триггере SQL Server - PullRequest
2 голосов
/ 19 мая 2010

Первая строка кажется правильной. Вторая строка была моим кодом SQLite. С кодом я получаю исключение об ошибке рядом с триггером. В VS он говорит, что составной идентификатор не может быть связан. С SQLite новый обозначает вставляемую строку. Поэтому я хотел бы увеличить количество получателей подписки. Как мне это сделать с помощью триггера SQL Server?

CREATE TRIGGER  trig_0  ON  subscription   
 AFTER INSERT  AS  
UPDATE user_data 
   SET msg_count = msg_count + 1 
 WHERE id = new.recipient; 

Ответы [ 3 ]

7 голосов
/ 19 мая 2010

В SQL Server нет волшебного «нового». Существует волшебство INSERTED, и есть таблица:

CREATE TRIGGER  trig_0  ON  subscription   
 AFTER INSERT  AS  
UPDATE user_data 
   SET msg_count = msg_count + 1 
FROM user_data
JOIN INSERTED ON id = INSERTED.recipient; 
1 голос
/ 19 мая 2010

я думаю, что inserted and delted таблицы, используемые триггером, не новые

3> CREATE TRIGGER myTriggerINSERT
4> ON Employee
5> FOR INSERT
6> AS
7> DECLARE @ID int, @Name nvarchar(30)
8>
9> SET @ID = (SELECT ID FROM inserted)
10> SET @Name = (SELECT Name FROM inserted)

для более подробной информации: http://www.java2s.com/Code/SQLServer/Trigger/Getvaluefromupdatedinsertedanddeleted.htm

0 голосов
/ 19 мая 2010

при условии, что подписка имеет получателя столбца, к которому вы можете присоединиться с user_data.id, вот один из способов, вы можете использовать вставленную псевдотаблица, чтобы присоединиться обратно

CREATE TRIGGER  trig_0  ON  subscription   
 AFTER INSERT  AS  
UPDATE user_data 
   SET msg_count = msg_count + 1 
 WHERE exists (Select * from inserted i where user_data.id = inserted.recipient) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...