我在 SQL Server 数据库中执行了以下查询。
SELECT * FROM Production.Product WHERE Name = 'Bearing Ball'
然后我尝试使用以下 SQL 命令获取查询文本以及统计信息:
SELECT
qs.sql_handle,
qs.execution_count AS EXECUTION_COUNT,
AVG_TIME = --Converted from microseconds
(qs.total_elapsed_time/1000000) / qs.execution_count,
qs.total_elapsed_time,
TOTAL_TIME = --Converted from microseconds
qs.total_elapsed_time/1000000,
st.text AS TEXT
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
ORDER BY qs.total_worker_time DESC
我得到这样的东西
(@1 varchar(8000))SELECT * FROM [Production].[Product] WHERE [Name]=@1
但是,我想从我的 c# 程序中执行字符串匹配并获取查询文本的统计信息。c# 程序只知道原始查询(SELECT * FROM Production.Product WHERE Name = 'Bearing Ball')。被替换的参数不是唯一的问题,因为您可以看到数据库服务器在表名中添加了方括号。
有没有办法克服这个问题。如何将我的原始查询(SELECT * FROM Production.Product WHERE Name = 'Bearing Ball')转换为标准化查询((@1 varchar(8000))SELECT * FROM [Production].[Product] WHERE [Name]=@ 1)? 我可以使用 Microsoft.Data.Schema.ScriptDom 执行此操作吗?请注意,我想规范化我的查询而不在数据库服务器中执行它。