0
我在SQL Server 2012表上编写触发器。触发本身只是正常工作时,我添加的语句从我的触发器更新表ELSE语句得到一个错误如何在触发器中使用两条语句
不正确的语法ELSE
我可能接近标示后发送电子邮件有一个语法错误,但我不能指出。
我试着添加“;”在第10和11行的结尾,但它并没有做到这一点。 注释行11将使整个触发器正常工作
在IF之后有两个语句/动作的最佳方法是什么?
1 CREATE TRIGGER dbo.MembersNameToCategories ON dbo.Members
2 AFTER UPDATE
3 AS
4
5 BEGIN
6 DECLARE @OldName NVARCHAR(150) = (SELECT name FROM Deleted)
7 DECLARE @NewName NVARCHAR(150) = (SELECT name FROM Inserted)
8 DECLARE @BodyTXT nvarchar(MAX) = 'Customer: ' + @oldName + ' has been modified with new name : ' [email protected] + '.'
9 IF EXISTS (SELECT NULL FROM Categories AS c WHERE c.Name = @OldName)
10 UPDATE Categories SET Name = @NewName WHERE Name = @OldName AND CategoryType = 7
11 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'MyProfile',@recipients = '[email protected]',@body_format = 'HTML',@body = @BodyTXT,@subject = 'A customer name has been modified'
12 ELSE
13 INSERT INTO Categories (ID,Modified,ModifiedByID,CategoryType,Name,Colour,RANK,MemberType,Private,DefaultCategory,Description,SendNotification)
14 VALUES (
15 NEWID(),
16 GETDATE(),
17 dbo.fnmyid(),
18 7,
19 @NewName,
20 -8000,
21 9999,
22 0,
23 0,
24 0,
25 N'',
26 0
27 )
28 END;
29 GO
谢谢 -Martin
添加'开始...... End'块? – Milen
当逻辑块中出现多条语句时,您需要BEGIN/END。你可以安全地做'如果1 = 1然后'做'其他东西',但你需要BEGIN/END如果你想做'如果1 = 1那么'做'做更多的事''做甚至更多的东西'其他东西' – Charleh