推荐: 调试oraclesql 存储过程调试,sql server存储过程
关于存储过程的调试,将来很容易知道该方法,但是当我不知道时,为了测试存储过程的正确性,可以打印,插入临时表等. 被描述为精疲力尽. 让我上班
腾讯云联合战将在2020年“大流行”,帮助恢复工作(优惠额空前!4核8G,5M带宽1684元/ 3年),
地址:
2020年阿里云的最低价格产品入场券,包括代金券,
地址:

SQL Server中有许多不同的工具可以帮助调试复杂的存储过程. 它们包括Visual Studio中提供的Transact-SQL调试器,可用于嵌入打印语句或从存储过程返回调试状态,或调用存储过程中的自定义错误以记录状态信息. SQL Trace还为用户提供了一个配置事件的工具.
用户可配置的事件不过是对名为sp_trace_generateevent的系统存储过程的调用. 该存储过程具有3个参数:
1. @eventid是介于82到91之间的整数值. 每个值对应于10个用户可配置事件类之一,这10个类的数目范围是0到9. 值为82会引发“ UserConfigurable: 0”事件,83会引发“ UserConfigurable: 1”事件,等等.
2. @userinfo是一个nvarchar(128)值,用于填充事件的TextData列.
3. @userdata是一个varbinary(8000)值,用于填充事件的BinaryData列.
在某些特别困难的情况下,您必须处理偶尔失败的存储过程,这些过程在测试环境中很难复制. 这很难长时间跟踪,因为要真正调试状态,可能需要语句级收集,并且如果运行时间太长,则此类收集将生成大量数据. 更好的选择是仅在存储过程级别和批处理级别进行跟踪,并使用用户可配置的事件来收集变量值并确定其他可在问题发生时帮助调试故障的数据. 使用这种方法,您不必再担心跟踪以收集过多的数据,可以让系统运行.

要建立它,必须首先知道sp_trace_generateevent存储过程需要ALTER TRACE权限才能运行. 因为用户的存储过程不太可能具有此权限,所以最好创建具有相应权限的打包存储过程并调用sp_trace_generateevent. 为此,必须使用SQL Server的模块签名功能. 第一步是在主中创建一个证书:
USE master GO CREATECERTIFICATE ALTER_TRACE_CERT ENCRYPTION BYPASSWORD = '-USE_a!sTr0Ng_PWD-or-3~' WITH SUBJECT = 'Certificate for ALTER TRACE', START_DATE = '20000101', EXPIRY_DATE = '99990101' GO
接下来,基于证书创建一个登录名. 此登录名同时被授予ALTER TRACE和AUTHENTICATE SERVER权限,从而授予其将服务器级权限传递给级模块的权限:
CREATE LOGINALTER_TRACE_LOGIN FROM CERTIFICATEALTER_TRACE_CERT GO GRANT ALTER TRACETO ALTER_TRACE_LOGIN GO GRANTAUTHENTICATE SERVER TO ALTER_TRACE_LOGIN GO
建议: SQL SERVER2008存储过程调试
昨天有人问我如何在sql server中调试存储过程. 我曾经写存储过程. 调试方法很笨拙,即要一一执行语句,然后检查结果是否令人满意. 这种调试方法真的很无奈. 极点

工作完成后,备份证书(包括密钥). 此备份可用于还原使用封装的存储过程的任何用户的相同证书.
BACKUP CERTIFICATE ALTER_TRACE_CERT TO FILE = ‘C:\ALTER_TRACE.cer’ WITH PRIVATE KEY ( FILE = ‘C:\ALTER_TRACE.pvk’, ENCRYPTION BY PASSWORD = ‘-USE_a!sTr0Ng_PWD-or-3~’, DECRYPTION BY PASSWORD = ‘-USE_a!sTr0Ng_PWD-or-3~’ ) GO
为了更好地理解本章中的示例代码,下面将介绍如何在tempdb中创建打包过程,但是实际上,这可以在任何用户中完成. 以下代码在tempdb的备份版本中创建一个证书,然后简单地封装sp_trace_generateevent存储过程:
USE tempdb GO CREATE CERTIFICATE ALTER_TRACE_CERT FROM FILE = ‘C:\ALTER_TRACE.cer’ WITH PRIVATE KEY ( FILE = ‘C:\ALTER_TRACE.pvk’, ENCRYPTION BY PASSWORD = ‘-USE_a!sTr0Ng_PWD-or-3~’, DECRYPTION BY PASSWORD = ‘-USE_a!sTr0Ng_PWD-or-3~’ ) GO CREATE PROCEDURE ThrowEvent @eventid INT, @userinfo nvarchar(128), @userdata varbinary(8000) AS BEGIN EXEC sp_trace_generateevent @eventid = @eventid, @userinfo = @userinfo, @userdata = @userdata END GO
为了完成此过程,存储过程对证书进行了签名,并为该过程授予了与ALTER_TRACE_LOGIN登录名等效的所有权限,然后将该权限授予了运行该存储过程的任何用户:
ADD SIGNATURE TO ThrowEvent BY CERTIFICATE ALTER_TRACE_CERT WITH PASSWORD = '-USE_a!sTr0Ng_PWD-or-3~' GO GRANT EXEC ON ThrowEvent TO [public] GO

如果用户在他们选择的上创建ThrowEvent存储过程sql 存储过程调试,则可以从其他存储过程开始使用它们. 另外,由于证书的存在,您可以忽略调用程序的权限. 尝试识别间歇性故障时,此工具非常重要.
例如,假设在测试过程中某些列需要在存储过程中更新,而这些列所在的表有时似乎没有更新. 此故障似乎是由于调用存储过程时另一个表的状态引起的,但是用户无法使用先前的安排重新生成它. 要对其进行调试,可以在更新的存储过程中插入以下代码:
IF @@ROWCOUNT = 0 EXEC ThrowEvent 82, N’No data inserted into MyTable’, 0x0000
还应建立跟踪以捕获“ RPC: 启动”,“ SQL: BatchStarting”和“ UserConfigurable: 0”事件. 运行一段时间后,如果触发了用户定义的事件并通知用户没有要插入的行,则它可能已经收集了足够的后台数据来确定插入时另一个表的状态.
此示例显示了将此工具添加到存储过程调试工具箱中的好处. 用户对存储过程进度的可见性控制程度越高,在小故障变大之前,跟踪和解决问题就越容易.
推荐: 如何调试SQL Server 2005存储过程
今天在调用存储过程时遇到了一些问题,想逐步浏览该存储过程,但是我发现在SQL Server Management Studio中,找不到类似于SQL Server 2000下的调试
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-165404-1.html
所以股民是你父母