如何根据SQL Server中的条件显示用于插入数据的消息结果?

时间:2017-08-24 06:27:56

标签: sql sql-server

如何根据触发结果显示消息?

我有这个触发器;也就是说,我只能在两个用户之间插入一条新消息,如果之前已匹配,那么我会检查我插入的这些ID,如果它们存在于Match表中:

CREATE TRIGGER trg_SentMessage_Insteadof
ON messages
INSTEAD OF INSERT
AS 
BEGIN
    SELECT *
    FROM inserted, matchs AS m
    WHERE (inserted.sentFrom = m.userID1 AND inserted.sentTo = m.userID2)
       OR (inserted.sentFrom = m.userID2 AND inserted.sentTo = m.userID1)
END 

我知道select中的*不正确,但我不知道如何用消息替换它。

例如这一行:

insert into messages 
values ('2017-05-01T13:45:03', 'heey', '201827364','124234524')   

应该返回答案"此消息无法发送"。

2 个答案:

答案 0 :(得分:1)

我不知道你在问什么,但据我所知,它应该像

create TRIGGER trg_SentMessage_Insteadof
ON messages
Instead OF INSERT
AS 
Begin
   declare @result varchar(30)
   if(exists( SELECT *
         FROM    inserted,matchs as m
          WHERE ( inserted.sentFrom=m.userID1 and inserted.sentTo=m.userID2 ) or 
          (inserted.sentFrom=m.userID2 and inserted.sentTo=m.userID1)))
       BEGIN
        //Your insert statement 
         set @result = 'inserted Successfull'
         select @result as Result
       END
   else
       set @result = 'Cannot be inserted'
       select @result as Result
END 

答案 1 :(得分:0)

为什么要使用触发器来满足此要求?

要将记录插入表中,您可以编写存储过程并根据表结构将参数传递给它。并且,您可以在插入之前检查表中的值,如果您的条件满足,则将其插入,否则不要。

您可以根据您的逻辑编辑以下程序:

Create procedure InsertSentMessageCheck
@col1 datatype1,
@col2 datatype2,
@col3 datatype3,
@col4 datatype4
As
Begin

Declare @counter int = 0

select @counter=count(*) from matches where (@col1=userid1 and @col2=userid2) or (@col1=userid2 and @col2=userid1)
if @counter>0 
begin
--<your insert statement>
select 'Iserted Successfully'
end
else
select 'Can not be inserted'

end