MS SQL 如何调试

yilin54 2016-07-25 08:35:42
触发器里的处理内容

--自动判断 库存
if exists ( select * from inserted )
begin
raiserror ('仓库库存不够', 16, 1) --这个会给出消息错误提示
rollback transaction
end
INSERT INTO SD_临时表(订单号,行号,客户) VALUES('dj01','001','测试点1') --测试点1


我的问题是:
1:我在数据库后台逐语句调试时,当EXISTS条件满足时,即会给出错误提示了,但是后面的 INSERT语句还是会执行到,虽然最终结果是不会执行插入的。 我觉得应该是执行到rollback transaction,这个触发器就应该马上退出了吧。
2:调试时,可以看到inserted 里的内容吗? 我刚开始用MS SQL的调试功能,感觉调试只能看到执行顺序,看不到里面具体结果集或者一些参数值呀。 是这样吗?
...全文
135 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2016-07-25
  • 打赏
  • 举报
回复
1:我在数据库后台逐语句调试时,当EXISTS条件满足时,即会给出错误提示了,但是后面的 INSERT语句还是会执行到,虽然最终结果是不会执行插入的。 我觉得应该是执行到rollback transaction,这个触发器就应该马上退出了吧。 --> 是的. 2:调试时,可以看到inserted 里的内容吗? 我刚开始用MS SQL的调试功能,感觉调试只能看到执行顺序,看不到里面具体结果集或者一些参数值呀。 是这样吗? --> 不可以看inserted的内容, 调试时SSMS下方有Output窗口可查看参数值.
薛定谔的DBA 2016-07-25
  • 打赏
  • 举报
回复
1,rollback transaction 对应的是哪个begin transaction ?错误级别16属于终止执行了。sql语句是顺序执行的,两个语句都不在同一个块中,下面的插入肯定也执行了,出发加个else判断。 2,想看inserted的内容,创建一张表,在触发器中将inserted记录插入到那张表。
xiaoxiangqing 2016-07-25
  • 打赏
  • 举报
回复
rollback transaction后面加return语句后面语句才不运行
卖水果的net 版主 2016-07-25
  • 打赏
  • 举报
回复
可以考虑把这个结果,写到一个临时表 insert into temp select * from inserted

34,575

社区成员

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

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