首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试T触发器?

如何调试T触发器?
EN

Stack Overflow用户
提问于 2014-02-26 06:03:30
回答 4查看 59.6K关注 0票数 29

我有一个表t,它有一个名为trgInsAfter的“后插入”触发器。我到底该如何调试它?我不是这方面的专家,所以问题和执行的步骤可能看起来很愚蠢。

到目前为止,我执行的步骤是: 1.通过server instance连接到SSMS (使用Windows帐户)

  1. 右键单击SSMS中左侧树中的触发器节点,双击打开它,触发器的代码将在一个新的查询窗口中打开(调用此Window-1)为:blah., 将触发器trgInsAfter更改为..。开始..。结束
  2. 打开另一个查询窗口(调用此Window-2),输入sql将一行插入表t: 插入t(c1,c2)值(1,'aaa')
  3. 在Window-1中设置一个断点(在触发器代码中)
  4. 在Window-2中设置一个断点(插入SQL代码)
  5. 单击工具栏上的Debug按钮,而Window-2是当前窗口。 插入SQL代码的断点被击中,但是当我查看Window-1时,触发器代码中的断点有一个工具提示,上面写着'unable to bind SQL breakpoint, object containing the breakpoint not loaded'

我可以理解问题:SSMS如何知道Window-1中的代码是触发器?

我想调试?我看不出该在哪里告诉SSMS‘嘿,这个查询编辑器中的代码是表t’sinsserst触发器的代码‘

有什么建议吗?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-26 07:20:51

实际上你想得太多了。

我首先在一个窗口中运行这个查询(设置):

代码语言:javascript
复制
create table X(ID int not null)
create table Y(ID int not null)
go
create trigger T_X on X
after insert
as
    insert into Y(ID) select inserted.ID
go

然后我可以丢弃那扇窗户。我打开一个新的查询窗口,写:

代码语言:javascript
复制
insert into X(ID) values (1),(2)

在那条线上设置一个断点。然后启动调试器(从菜单或工具栏或Alt-F5启动Debug)并等待(调试器从来没有太快)等待它到达断点。然后,我选择了Step Into (F11)。lo (又等了一会儿)打开了一个新窗口,这是我的触发器,调试器停止的下一行代码是触发器中的insert into Y...行。我现在可以在触发器内设置任何想要设置的断点。

票数 48
EN

Stack Overflow用户

发布于 2014-02-26 06:47:17

SSMS中有一个调试菜单,但是您可能需要在服务器上才能进行调试,所以如果它是远程访问,则可能不会为此设置它。该debug选项将允许您执行代码,并进入触发器并以这种方式调试它(就像调试大多数其他代码一样)。

如果无法访问调试菜单/函数,则必须“手动”调试:

首先,通过将触发器的输入插入调试表,确保触发器正确运行。然后,您可以验证它的调用是否正确。然后,可以使用debug表中的值调试触发器的查询,就像调试其他sql查询一样。

票数 4
EN

Stack Overflow用户

发布于 2018-02-21 13:07:44

我也不能Step Into,它会直接超过我的INSTEAD OF INSERT触发器。所以我最终用以下方式替换了触发器:

代码语言:javascript
复制
ALTER TRIGGER [MyView_Instead_Insert] 
   ON  [MyView] 
   INSTEAD OF INSERT
AS 
BEGIN
SET NOCOUNT ON

select * into temp from INSERTED

END

它创建了一个名为temp的表,其中包含了INSERTED的列名和值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22033109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档