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

C# 从日志文件创建人类可读的SQL,c#,tsql,parsing,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

我有包含以下格式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相反的东西

您可以使用

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


本质上,它将解析一个SQL查询,对于我在问题中遇到的查询,它将返回一个“ExecuteStatement”,并将其分解为各个部分(语句、变量、变量值等)。然后,我对其进行操作,并使用Sql100ScriptGenerator将生成的SQL语句格式化为人类可读的格式。

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

本质上,它将解析一个SQL查询,对于我在问题中遇到的查询,它将返回一个“ExecuteStatement”,并将其分解为各个部分(语句、变量、变量值等)。然后,我对其进行操作,并使用Sql100ScriptGenerator将生成的SQL语句格式化为人类可读的内容