我有一个表t,它有一个名为trgInsAfter的“后插入”触发器。我到底该如何调试它?我不是这方面的专家,所以问题和执行的步骤可能看起来很愚蠢。
到目前为止,我执行的步骤是: 1.通过server instance连接到SSMS (使用Windows帐户)
'unable to bind SQL breakpoint, object containing the breakpoint not loaded'我可以理解问题:SSMS如何知道Window-1中的代码是触发器?
我想调试?我看不出该在哪里告诉SSMS‘嘿,这个查询编辑器中的代码是表t’sinsserst触发器的代码‘
有什么建议吗?
谢谢
发布于 2014-02-26 07:20:51
实际上你想得太多了。
我首先在一个窗口中运行这个查询(设置):
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)在那条线上设置一个断点。然后启动调试器(从菜单或工具栏或Alt-F5启动Debug)并等待(调试器从来没有太快)等待它到达断点。然后,我选择了Step Into (F11)。lo (又等了一会儿)打开了一个新窗口,这是我的触发器,调试器停止的下一行代码是触发器中的insert into Y...行。我现在可以在触发器内设置任何想要设置的断点。
发布于 2014-02-26 06:47:17
SSMS中有一个调试菜单,但是您可能需要在服务器上才能进行调试,所以如果它是远程访问,则可能不会为此设置它。该debug选项将允许您执行代码,并进入触发器并以这种方式调试它(就像调试大多数其他代码一样)。

如果无法访问调试菜单/函数,则必须“手动”调试:
首先,通过将触发器的输入插入调试表,确保触发器正确运行。然后,您可以验证它的调用是否正确。然后,可以使用debug表中的值调试触发器的查询,就像调试其他sql查询一样。
发布于 2018-02-21 13:07:44
我也不能Step Into,它会直接超过我的INSTEAD OF INSERT触发器。所以我最终用以下方式替换了触发器:
ALTER TRIGGER [MyView_Instead_Insert]
ON [MyView]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
select * into temp from INSERTED
END它创建了一个名为temp的表,其中包含了INSERTED的列名和值。
https://stackoverflow.com/questions/22033109
复制相似问题