我支持使用 SQL Server 2016 后端的第三方应用程序。我们没有源代码访问权限,第三方支持响应缓慢。大多数情况下,我可以索引和魔术来摆脱它向数据库抛出的有时可怕的查询,但是在很多情况下,我几乎无能为力(在时间、金钱和存储的限制下) )。查询是错误的。
有没有办法在行政上将应用程序提交的查询替换为其他查询?如果应用程序名称匹配,我正在想象对批处理执行的某种正则表达式匹配。
例子:
-- Submitted by application
update Table set IsBilled = 0 where ID = '{EFD5F13C-6123-4913-B530-8941FC71B969}'
-- What I want the query to be (to avoid spurious updates to Table)
-- (Table is large, and the application is submitting this query on every page view)
update Table set IsBilled = 0 where ID = '{EFD5F13C-6123-4913-B530-8941FC71B969}' and IsBilled = 1
-- Proposed regex
-- Match
update Table set IsBilled = 0 where ID = '(\{[A-F0-9\-]+\})'
-- Replace
update Table set IsBilled = 0 where ID = '$1' and IsBilled = 1
Run Code Online (Sandbox Code Playgroud)
我设想的一些用途是避免无用的更新,其他用途是改写 where 子句以保持可讨论性。我相信还有其他场景会浮现在脑海中。
有没有办法在行政上将应用程序提交的查询替换为其他查询?
不,您将获得的最接近的开箱即用功能是计划指南可以做的。
如果应用程序名称匹配,我正在想象对批处理执行的某种正则表达式匹配。
目前,SQL Server 内部没有任何本机可以做到这一点。
我可以即时编辑 SQL Server 收到的批次吗?
不幸的是(或幸运的是)没有任何内置的东西可以做到这一点。我不想给你任何想法,但你需要在应用程序和数据库服务器之间有一个中间层。此拦截应用程序需要了解 TDS(这是与 SQL Server 一起使用的协议),并允许您更改(或再次不更改)TDS 数据包以动态更改查询。
如果你做了这个,你应该卖掉它:)
归档时间: |
|
查看次数: |
175 次 |
最近记录: |