我可以即时编辑 SQL Server 收到的批次吗?

Mit*_*tch 2 sql-server

我支持使用 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 子句以保持可讨论性。我相信还有其他场景会浮现在脑海中。

Sea*_*ser 5

有没有办法在行政上将应用程序提交的查询替换为其他查询?

不,您将获得的最接近的开箱即用功能是计划指南可以做的。

如果应用程序名称匹配,我正在想象对批处理执行的某种正则表达式匹配。

目前,SQL Server 内部没有任何本机可以做到这一点。

我可以即时编辑 SQL Server 收到的批次吗?

不幸的是(或幸运的是)没有任何内置的东西可以做到这一点。我不想给你任何想法,但你需要在应用程序和数据库服务器之间有一个中间层。此拦截应用程序需要了解 TDS(这是与 SQL Server 一起使用的协议),并允许您更改(或再次不更改)TDS 数据包以动态更改查询。

如果你做了这个,你应该卖掉它:)