在 SQL 服务器中调试远程聚合
Debugging a Remotely-located Aggregate in SQL Server
所以我遇到了一个大问题。我需要调试一个自定义聚合,我能够构建和部署它,但一旦开始,它将不允许以下操作:
- 在任何情况下都具有管理员访问权限。
File.Write
访问权限(不能写入文本文件)
EventLog
访问。
Remote Debugging
由于复杂的防火墙、用户权限等原因访问。
- 通过
SQL Server
的本地安装获取数据。我将数据存储在一个远程位置,但无法将其转储以进行测试。
在这种情况下我将如何调试自定义聚合?当尝试使用 File.Write
或 EventLog.WriteEvent
时,它会引发安全访问异常。
有没有办法打印每次聚合函数调用期间发生的输出?我想知道什么正在被注入和倾倒到 Merge()
、Terminate()
等,因为它正在发生。
有什么我想念的吗?谢谢。
鉴于这些困难的访问限制,我们能够想出一个解决方案。它并不完美,但它为我们提供了所需的输出。
我们的解决方案是创建一个 StringBuilder
实例。
StringBuilder sb = new StringBuidlder();
并在需要调试的地方添加内容:
sb.Append("|Debug information");
最后,我们将 StringBuilder
附加到收集结果中。而不是返回 "test," 我们会返回这样的东西:
"test|debug information|more debug information|more debug information."
然后我们会复制该信息,并将其用于调试。它并不完美,但我们能够通过拆分结果来分离结果,并完成工作。
所以我遇到了一个大问题。我需要调试一个自定义聚合,我能够构建和部署它,但一旦开始,它将不允许以下操作:
- 在任何情况下都具有管理员访问权限。
File.Write
访问权限(不能写入文本文件)EventLog
访问。Remote Debugging
由于复杂的防火墙、用户权限等原因访问。- 通过
SQL Server
的本地安装获取数据。我将数据存储在一个远程位置,但无法将其转储以进行测试。
在这种情况下我将如何调试自定义聚合?当尝试使用 File.Write
或 EventLog.WriteEvent
时,它会引发安全访问异常。
有没有办法打印每次聚合函数调用期间发生的输出?我想知道什么正在被注入和倾倒到 Merge()
、Terminate()
等,因为它正在发生。
有什么我想念的吗?谢谢。
鉴于这些困难的访问限制,我们能够想出一个解决方案。它并不完美,但它为我们提供了所需的输出。
我们的解决方案是创建一个 StringBuilder
实例。
StringBuilder sb = new StringBuidlder();
并在需要调试的地方添加内容:
sb.Append("|Debug information");
最后,我们将 StringBuilder
附加到收集结果中。而不是返回 "test," 我们会返回这样的东西:
"test|debug information|more debug information|more debug information."
然后我们会复制该信息,并将其用于调试。它并不完美,但我们能够通过拆分结果来分离结果,并完成工作。