触发器导致插入失败

时间:2015-06-11 11:47:16

标签: sql-server tsql triggers

我在Web应用程序表上的MSSQL中创建一个触发器。问题是,在我创建此触发器后,当我尝试提交表单时出现错误。 Web应用程序用作社交网络并发送消息。我想通过短信将此messegaes发送给此邮件的收件人。所以mz触发器在SMSServer中插入文本和收件人数量。 你能帮我解决一下吗?

这是我的触发器:

create trigger trigger_ZpravyMonoxViaSMS on [dbo].[SnMessageRecipient] 
after insert  as
SET NOCOUNT ON;
DECLARE @text as nvarchar(160)
DECLARE @calledstatio nvarchar(20)
DECLARE @id uniqueidentifier
DECLARE @ms int
SET @id = (select top 1 i.messageid from inserted i)
SET @text = (select left(Body,160) 
             from SnMessage s 
             join SnMessageRecipient sr on s.id = sr.MessageId 
             where s.id = @id)
SET @calledstatio = (select '420'+tolist 
                     from SnMessage s 
                     join SnMessageRecipient sr on s.id = sr.MessageId
                     where s.id = @id)
SET @ms = (select i.messagestatus from inserted i where i.MessageId = @id)
if @ms like '1'
begin
insert into [SQL].[SMSServer].[dbo].[MessageOut]( messageto
              ,messagefrom
              ,messagetext
              ,messageType
              ,gateway
              ,userid
              ,isread
              ,issent)
values (@calledstatio, '', @text, '', 'GSM', '1', '0','0')
end

1 个答案:

答案 0 :(得分:0)

触发器有几个问题:

  • 它只发送一条消息,即使您一次插入100条消息(如果您100%确定只发生单行插入,可能没问题)
  • 如果每个ID有多个收件人,那么它会失败,因为你在@calledstatio语句中没有TOP 1
  • 即使如果你添加TOP 1,也意味着你只会向一个收件人发送邮件(根据执行计划,它可能与哪一个不同)

编辑:除此之外,您的错误消息似乎来自MessageOut表上的触发器。您应该尝试在此表中插入记录手册。也许您想要使用调试模式(使用F11的startet)或打印出变量的内容以查看您真正尝试插入的内容。