当前位置: 首页 > 面试题库 >

如何调试T-SQL触发器?

秦博达
2023-03-14
问题内容

我有一个表t,它具有一个称为trgInsAfter的“插入后”触发器。究竟该如何调试?我对此不是专家,所以问题和执行的步骤可能看起来很愚蠢。

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

  1. 右键单击SSMS中左侧树中的触发器节点,然后双击以将其打开,触发器的代码将在新查询窗口(称为Window-1)中打开,如下所示:blah ....,

    ALTER TRIGGER trgInsAfter AS .... BEGIN ... END
    
  2. 打开另一个查询窗口(称为Window-2),输入sql将一行插入表t中:

    insert t(c1,c2) values(1,'aaa')
    
  3. 在Window-1中设置一个断点(在触发器的代码中)

  4. 在Window-2中设置一个断点(插入SQL代码)

  5. 在Window-2是当前窗口的情况下,单击工具栏上的“调试”按钮

插入SQL代码的断点被命中,但是当我查看Window-1时,触发器代码中的断点有一个工具提示,说 'unable to bind SQL breakpoint, object containing the breakpoint not loaded'

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

我要调试吗?我看不到要告诉SSMS的地方,“嘿,此查询编辑器中的代码是表t的插入触发器的代码”

有什么建议?

谢谢


问题答案:

您实际上对此考虑过度。

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

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

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

insert into X(ID) values (1),(2)

并在该行上设置一个断点。然后,我 启动
调试器(Debug从菜单或工具栏或Alt-F5)并等待(有一阵子,调试器从未如此之快)以使其达到该断点。然后,在那儿打了,我选择了Step Into(F11)。然后(再次等待一会儿)打开了一个新窗口,这是我的触发器,调试器停止的下一行代码是insert into Y...触发器中的行。现在,我可以在触发器中设置任何其他断点。



 类似资料:
  • 问题内容: 有人可以通过板载触发器帮助解决简单的t- sql脚本问题吗?我使用非常简单的触发器将数据从一个表复制到另一个表(这些表之间没有关系)。当我尝试在触发器创建之后(从同一脚本)直接在第一时间插入数据时,我得到了期望的结果,但是所有下一次尝试都在下一个提示下失败了:’ ‘我很困惑,这意味着什么。查看下面的触发器: 没有理由发布表格的图表,因为它非常原始(正如我在上面提到的那样,这些表格之间没

  • 我在Apex中有一个触发器。如何编写检查触发器是否被调用的单元测试?

  • 问题内容: 我正在使用ADO.NET来访问SQL Server 2005,并且希望能够从我正在调用的T-SQL存储过程中进行登录。有可能吗? 使用ADO.NET时,我看不到’print’语句的输出,因为我只想使用日志记录进行调试,所以理想的解决方案是从SysInternals向DebugView发出消息。 问题答案: 我通过按照Eric Z Beard的建议编写一个SQLCLR过程来解决此问题。程

  • 问题内容: 全部, 如何检查指定的varchar字符或整个字符串在T- Sql中是否为大写?理想情况下,我想编写一个函数来测试字符是否为大写,然后可以将其应用于通用varchar。对于非字母字符,应返回false。我只对英语字符感兴趣。 我正在SQL Management Studio中使用T-sql,并且尝试以这种方式从表中拉出以小写字母开头的记录: 它返回0条记录,但我知道有些记录以大写和小写

  • SQL Server触发器是特殊的存储过程,它们会自动执行以响应数据库对象,数据库和服务器事件。 SQL Server提供三种类型的触发器: 数据操作语言(DML)触发器,它们响应针对表的INSERT,UPDATE和DELETE事件而自动调用。 数据定义语言(DDL)触发器响应CREATE,和DROP语句而触发。 DDL触发器也会响应执行类似操作的某些系统存储过程而触发。 登录触发器以响应事件而触