2010-05-19 6 views
2

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

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

Моей рекомендацией было бы использовать представление и иметь 'msg_count' как вычисленный столбец на основе использования функции агрегации' COUNT' ... –

ответ

7

В SQL Server нет волшебства «новое». Существует волшебный ВСТАВИТЬ, и таблица:

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; 
+0

+1 для скорректированного кода –

1

я думаю, что есть 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

+1

Это очень плохая практика кодирования, вставка 2 строки в вашей партии и ваш триггер взрываются, пожалуйста, прочитайте http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/best-practice-coding-sql-server-triggers – SQLMenace

+0

Это просто пример, чтобы показать что вставлена ​​таблица, используемая sql trigger не новая –

0

предполагающей подписка имеет получателя столбца, к которому вы можете присоединиться с 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) 
Смежные вопросы