从日志文件创建人类可读的SQL

时间:2011-10-21 14:31:31

标签: c# tsql parsing

我的日志文件包含以下格式的SQL语句:

exec sp_executeSQL @stmt=N'SELECT Field1, Field2, Field3 FROM MyTable WHERE Field1 = @P1 AND Field2 = @P2', @params=N'@P1 Numeric(15,3), @P2 varchar(20)', @P1='1234.54', @P2='Hello'

我想将其格式化为:

SELECT Field1, Field2, Field3
FROM   MyTable
WHERE  Field1 = 1234.54
AND    Field2 = 'Hello'

手动解析消息(即剥离语句并将@ P1,@ P2替换为相应的值是可能的,但您需要处理所有不同的类型)

我正在寻找与GetCommandLogString mentioned here

相反的东西

2 个答案:

答案 0 :(得分:1)

您可以使用General SQL Parser

答案 1 :(得分:0)

我最终使用了Microsoft.Data.Schema.ScriptDom中提供的TSql100Parser。

本质上,它将解析SQL查询,并且在我的问题中查询的情况下,返回一个'ExecuteStatement',分解为它的各个部分(语句,变量,变量值等)。然后我操纵它,并使用Sql100ScriptGenerator将生成的SQL语句格式化为人类可读的东西。