Trigger有没办法弹出一个提示信息,然后数据仍可保存?

meilian01 2012-06-26 03:27:20
Trigger有没办法弹出一个提示信息,然后数据仍可保存?
...全文
204 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生无悔 2012-06-26
  • 打赏
  • 举报
回复
raiserror只是提示错误,但可以正常保存的,只要你不加入rollback,你处理过的数据会自动保存
AcHerat 元老 2012-06-26
  • 打赏
  • 举报
回复

create table tb(id int,sname varchar(10))
insert into tb
select 1,'a' union all
select 2,'b'
go

create trigger update_tb on tb
instead of insert,update
as
begin
if exists (select 1 from deleted)
begin
raiserror('update!',16,1)
update a
set a.sname = b.sname
from tb a join inserted b on a.id = b.id
end
else
begin
raiserror('insert!',16,1)
insert into tb
select id,sname from inserted
end
end
go

-- 1
insert into tb
select 3,'c'

select * from tb

-- 2
update tb
set sname = 'bb'
where id = 3

select * from tb

drop trigger update_tb
drop table tb

/***************************

消息 50000,级别 16,状态 1,过程 update_tb,第 15 行
insert!

(1 行受影响)

(1 行受影响)
id sname
----------- ----------
1 a
2 b
3 c -- insert

(3 行受影响)

消息 50000,级别 16,状态 1,过程 update_tb,第 8 行
update!

(1 行受影响)

(1 行受影响)
id sname
----------- ----------
1 a
2 b
3 bb --update

(3 行受影响)
meilian01 2012-06-26
  • 打赏
  • 举报
回复
这是在trigger里,不能放前面,还有很多其它判断
AcHerat 元老 2012-06-26
  • 打赏
  • 举报
回复
你把需要保存的数据处理放raiserror前边。
meilian01 2012-06-26
  • 打赏
  • 举报
回复
代码如下:
if (select count(1) from inserted i, PINV P, PODTL2 PD2 where P.PINV=i.PINV and PD2.PONUM =i.PO and PD2.LOT = i.LOT and abs(datediff(day,P.IDATE,PD2.DELDATE)) >5 ) > 0
begin
raiserror('警告:收貨日期大于或小于PO交期5天!',18,18)
end
meilian01 2012-06-26
  • 打赏
  • 举报
回复
RAISERROR 提示后不能保存
AcHerat 元老 2012-06-26
  • 打赏
  • 举报
回复
RAISERROR

???

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧