sql-server - 如何记录存储过程调用的详细信息?
问题描述
在我当前的项目中,我们遇到了可以通过了解正在进行的调用以及它们各自的参数来非常容易调试的问题(在我们的开发环境中)。为了实现这一点,我建立了一个存储 PROC 名称的表,以及一些包含调用它的所有参数的任意 JSON blob。我也在存储通话时间,但这无关紧要。
以下是我发现填充此表的唯一方法:
DECLARE @prmJson NVARCHAR(MAX) = ( SELECT * FROM (VALUES
('@userId' , @userId )
, ('@baiCodeMerchantId' , @baiCodeMerchantId )
, ('@baiCodeMerchantType' , @baiCodeMerchantType )
, ('@appliedAccountId' , @appliedAccountId )
, ('@unappliedAccountId' , @unappliedAccountId )) AS P(Name, Value) FOR JSON AUTO);
INSERT INTO History.SprocCallRecords ([SprocName], [ParametersJson])
VALUES (QUOTENAME(OBJECT_NAME(@@PROCID)), @prmJson);
我的问题是,这是要添加到每个过程中的大量代码。我宁愿能够反映范围内的值,或者能够调用一些类似 C# 的 nameof() 方法。虽然我显然将其他语言投射到 tSQL 上,但我非常想在将它集成到任何地方之前简化这个样板。
大多数情况下,我正在寻找建议,但我在 Google RE 上找不到太多建议:正是这个。
提前感谢您的任何帮助!
解决方案
您可以动态调用存储过程,因此您将能够将每次调用保存到某个日志表。
例子:
DECLARE
@param1 nvarchar(50),
@param2 nvarchar(50),
@param3 nvarchar(50)
SET @param1 = 'value of param 1'
SET @param2 = 'value of param 2'
SET @param3 = 'value of param 3'
DECLARE @sp_text nvarchar(2000)
SET @sp_text = 'exec some_sp ''' + @param1 + ''', ''' + @param2 + ''', ''' + @param3 + ''''
INSERT INTO Executions_Log_Table(Execution_DT, SP_Call) SELECT GetDate(), @sp_text
EXEC(@sp_text)
希望能帮到你
推荐阅读
- apache-kafka - 如何使用 kafka-python 检测分区结束?
- angularjs - $q.all() - 不按顺序返回的响应
- javascript - 按顺序运行多个 Promise.all() (只有在第一个完成后才读取第二个 Promise.all)
- react-native - 从 github 编译应用程序的本机反应
- html - iframe 沙箱没有缓存我的 JS 脚本
- node.js - 无法发布到路线
- woocommerce - 我的 cron 作业不起作用 - 无法打开输入文件错误
- django - Django如何将url参数携带到新的URL中
- json - 自动转换 [ 到 { 在 json
- powershell - 尝试将多个变量解析为用于 openssl 命令的 powershell foreach 循环