如何根据触发结果显示消息?
我有这个触发器;也就是说,我只能在两个用户之间插入一条新消息,如果之前已匹配,那么我会检查我插入的这些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')
应该返回答案"此消息无法发送"。
答案 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