Asp.net 如何调试SQL Server中的触发器ASP Web应用程序执行的是什么?

Asp.net 如何调试SQL Server中的触发器ASP Web应用程序执行的是什么?,asp.net,sql-server,visual-studio,debugging,ssms,Asp.net,Sql Server,Visual Studio,Debugging,Ssms,上下文: 我有一个使用类库的(遗留)ASP.NET应用程序,它的数据访问是使用ad dal.dbml及其生成的代码调用SPs 我使用的是VS 2015 Enterprise update 1,已在本地安装了Microsoft SQL Server 2014-12.0.4213.0(X64)(构建10586)和SSMS 2014 问题 当运行Web应用程序时,应用程序将行插入到我最近实现的插入触发器的表中。如何调试Web应用程序“触发”的实际触发器执行? 注意:我知道如何在SSMS中以交互方式调试

上下文:

我有一个使用类库的(遗留)ASP.NET应用程序,它的数据访问是使用ad dal.dbml及其生成的代码调用SPs

我使用的是VS 2015 Enterprise update 1,已在本地安装了Microsoft SQL Server 2014-12.0.4213.0(X64)(构建10586)和SSMS 2014

问题

当运行Web应用程序时,应用程序将行插入到我最近实现的插入触发器的表中。如何调试Web应用程序“触发”的实际触发器执行? 注意:我知道如何在SSMS中以交互方式调试SP。现在这不是我想要的,因为复制和参数化web应用程序的功能几乎是不可能的。所以我想通过Web应用程序进行调试


这可能吗?(这似乎是一个非常常见的需求,尽管我不理解它需要非常复杂的调试基础设施和服务)

您要做的是运行Profiler,以获取发生错误时发送的典型值

然后,我知道的解决此类问题的最简单方法是从触发器中取出触发器代码,并使用#insert(和/或#deleted,如果需要)而不是触发器访问的伪表将其放入脚本中

插入存储的进程将插入到表中的数据插入到#插入的表中。然后,您可以一步一步地执行触发器,甚至可以查看插入中使用的select的结果


我在触发器中发现的最常见错误是,它们被设置为只处理插入的一条记录,而不是多条记录。因此,如果您发现您的proc为您获得的值输入的是一条记录,那么这可能就是问题所在。或者您可能缺少必填字段。在这种情况下,您可能需要调整proc以输入值或指定默认值。

您要做的是运行探查器以获取发生错误时发送的典型值

然后,我知道的解决此类问题的最简单方法是从触发器中取出触发器代码,并使用#insert(和/或#deleted,如果需要)而不是触发器访问的伪表将其放入脚本中

插入存储的进程将插入到表中的数据插入到#插入的表中。然后,您可以一步一步地执行触发器,甚至可以查看插入中使用的select的结果


我在触发器中发现的最常见错误是,它们被设置为只处理插入的一条记录,而不是多条记录。因此,如果您发现您的proc为您获得的值输入的是一条记录,那么这可能就是问题所在。或者您可能缺少必填字段。在这种情况下,您可能需要调整进程以输入值或指定默认值。

您所说的(旧版)ASP.NET是什么意思?与传统的ASP.NET不同,ASP.NET并不是一个被普遍认为是“遗留”的东西。我不认为有任何方法可以单步执行这样的触发代码。如果你发布触发器,也许我们可以帮助你。@Tim:我的意思是这个应用程序是遗留的。其数据访问层主要使用遗留VS代码生成器。所有执行环境都是最新的,包括IIS Expess v?在Windows 10、VS 2015和SQL Server 2014上。@SeanLange:非常感谢,这是最后一个备份计划。触发器调用一些表值UDF,模式非常复杂。真正的帮助是以交互方式查看哪个变量/选择是空的……我觉得你的触发器太复杂了。触发器中不应包含复杂的逻辑。您所说的(遗留)ASP.NET是什么意思?与传统的ASP.NET不同,ASP.NET并不是一个被普遍认为是“遗留”的东西。我不认为有任何方法可以单步执行这样的触发代码。如果你发布触发器,也许我们可以帮助你。@Tim:我的意思是这个应用程序是遗留的。其数据访问层主要使用遗留VS代码生成器。所有执行环境都是最新的,包括IIS Expess v?在Windows 10、VS 2015和SQL Server 2014上。@SeanLange:非常感谢,这是最后一个备份计划。触发器调用一些表值UDF,模式非常复杂。真正的帮助是以交互方式查看哪个变量/选择是空的……我觉得你的触发器太复杂了。触发器不应该有复杂的逻辑。谢谢你的回答。(我在inserted中正确地处理了多行。)实际上没有显式错误,相反,UPDATE FROM语句似乎没有完成它的工作,因为SELECT部分没有生成行,这就是我不理解的原因……感谢您的回答。(我在inserted中正确地处理了多行。)实际上没有显式错误,相反,UPDATE FROM语句似乎没有完成它的工作,因为SELECT部分没有生成行,我不明白为什么。。。