![]() |
1
140
出于日志记录的目的,恐怕没有更好的方法了,只能自己构造字符串:
|
![]() |
2
123
虽然并不完美,但我为TSQL设计的东西可以很容易地调整为其他口味。..如果没有别的,它将为你自己的改进提供一个起点:) 这在数据类型和输出参数等方面做得很好,类似于在Contoso中使用“执行存储过程”。我们主要使用SP,因此“text”命令不考虑参数等
这会沿着这些路线产生输出。..
|
![]() |
3
52
你不能,因为它不会生成任何SQL。
参数化查询(中的查询
您可以使用SQL Profiler查看幕后。 |
![]() |
4
33
我需要一个类似于字符串转换器的命令来允许更详细的日志记录,所以我写了这个。它将生成在新会话中重新执行命令所需的文本,包括输出参数和结构化参数。它经过了轻微的测试,但买者自负。 例子:
将生产:
实施:
|
![]() |
5
6
我也遇到过这样的问题,一些参数化查询或sp会给我一个SqlException(主要是字符串或二进制数据会被截断),语句也很难调试(据我所知,目前sql Azure没有sql分析器支持) 我在这里的反应中看到了很多模拟代码。我最终将我的解决方案放入Sql库项目中以供将来使用。 发电机可在此处获得: https://github.com/jeroenpot/SqlHelper/blob/master/Source/Mirabeau.MsSql.Library/SqlGenerator.cs 它同时支持CommandType。文本和命令类型。存储程序 如果你安装 nuget-package 您可以使用以下语句生成它:
|
![]() |
6
5
如果你使用的是SQL Server,你可以使用SQL Server Profiler(如果你有)来查看实际执行的命令字符串。这对于复制/粘贴测试目的很有用,但恐怕不适用于日志记录。 |
![]() |
7
4
回答晚了,我知道,但我也想要这个,这样我就可以记录SQL了。以下内容简短,符合我的需求。 以下生成的SQL可以在Contoso中复制/粘贴(它将参数正确地替换为值)。您可以添加更多类型,但这符合我在本例中使用的所有类型。
现在,我可以在执行SQL之前记录它:
|
![]() |
8
2
Profiler无疑是您的最佳选择。 由于涉及准备+执行步骤,您可能需要从分析器中复制一组语句。 |
![]() |
9
2
我也有同样的问题,在阅读了这些回复后,我错误地认为不可能得到确切的查询结果。我错了。
解决方案:
打开
请注意,对于繁忙的数据库来说,这可能不是一个可行的选择。但是,使用这些步骤,您应该能够大大缩小结果范围。 |
![]() |
10
2
使用过的部分 Flapper's code 对于我的解决方案,它返回整个SQL字符串,包括要在MS SQL SMS中运行的参数值。
|
![]() |
11
2
我的解决方案:
|
![]() |
12
2
我为自己写了这个方法。我使用了 Bruno Ratnieks's 代码。也许它对某人有用。
|
![]() |
13
1
如果您的数据库是Oracle,并且sql文本包含名为的动态变量
|
![]() |
14
1
如果只是检查参数在结果查询中的格式,大多数DBMS将允许从无查询文字。因此:
这样你就可以看到报价是否加倍等。 |
![]() |
15
1
这是我用来将存储过程的参数列表输出到调试控制台的方法:
这将生成一个与此类似的控制台输出:
我将此代码直接放置在我要调试的任何过程的下方,它类似于sql分析器会话,但使用C#。 |
![]() |
16
1
修改版本 Kon's answer 因为它只能部分地使用类似命名的参数。使用String Replace函数的缺点。除此之外,我完全相信他的解决方案。
|
![]() |
17
0
这个解决方案现在对我很有效。也许它对某人有用。请原谅所有的裁员。
|
![]() |
18
0
正如@pkExec和@Alok所提到的,使用替换在100%的情况下都不起作用。 这是我在DAL中使用的解决方案,它使用RegExp仅“匹配整个单词”并正确格式化数据类型。因此,生成的SQL可以直接在MySQL Workbench(或SQLSMS等)中进行测试:) (根据使用的DBMS替换MySQLHelper.EscapeString()函数。)
例子:
将生成:
|
![]() |
19
0
sql命令查询将使用exec sp_executesql执行,因此这里有另一种将语句作为字符串获取的方法(SqlCommand扩展方法):
|
![]() |
20
0
也需要涵盖非存储过程,所以我用以下逻辑增强了CommandAsSql库(见上面@Flapper答案下的注释):
拉取请求位于: https://github.com/jphellemons/CommandAsSql/pull/3/commits/527d696dc6055c5bcf858b9700b83dc863f04896 Regex的想法基于@stambikk和EvZ的上述评论以及 https://stackoverflow.com/a/2544661/903783 这提到了“消极的回头看断言”。在正则表达式的开头使用\B而不是\B进行单词边界检测是因为p.parameterName将始终以“@”开头,而“@”不是单词字符。 请注意,ParameterValueForSQL()是CommandAsSql库中定义的一个扩展方法,用于处理单引号字符串参数值等问题。 |
![]() |
21
0
如果要转换命令文本:
现在,您可以按如下方式获取非参数命令文本:
结果是“UPDATE someTable SET Value='myValue'WHERE Id=1234”,不再带参数 |
![]() |
22
0
扩展了的 Kon's code 要帮助调试存储过程,请执行以下操作:
在我的第一个测试用例中,它生成了:
您可能需要添加一些更有条件的“..is…”类型的作业,例如日期和时间。 |
![]() |
23
-1
|
![]() |
24
-2
一个衬垫:
|
![]() |
Mear1628 · vb.net从随机选择的端口号接收UDP 7 月前 |
![]() |
user1946932 · .Net正则表达式在所有字符前添加空格 8 月前 |
![]() |
user1946932 · 正则表达式:删除连续两个以上的<br>? 1 年前 |
|
Josh · 通过反思访问孩子的财产 1 年前 |
![]() |
Khu RJ · 更新网格中的单元格-DevExpress网格控件 1 年前 |
![]() |
Mick · VB.NET Regex。替换不起作用(数组未更新) 1 年前 |