2013-09-24 32 views
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

+3

添加'开始...... End'块? – Milen

+1

当逻辑块中出现多条语句时,您需要BEGIN/END。你可以安全地做'如果1 = 1然后'做'其他东西',但你需要BEGIN/END如果你想做'如果1 = 1那么'做'做更多的事''做甚至更多的东西'其他东西' – Charleh

回答

0

试试这个:

IF EXISTS (SELECT NULL FROM Categories AS c WHERE c.Name = @OldName) 
BEGIN 
     UPDATE Categories SET Name = @NewName WHERE Name = @OldName AND CategoryType = 7 
     EXEC msdb.dbo.sp_send_dbmail @profile_name = 'MyProfile',@recipients = 
'[email protected]',@body_format = 'HTML',@body = @BodyTXT,@subject = 'A customer name has been modified' 
END 
ELSE