我已经知道的一个问题没有很好的答案。
我有第三方应用无法更改。应用程序的数据库已从MS Access转换为SQL Server 2012.该程序与ODBC连接,不关心后端。它发送了非常简单的SQL,似乎也适用于SQL Server。
但是有一个名为“PLAN”的表存在问题,我已经知道它是一个SQL Server关键字。
我知道您通常会使用方括号访问这样的表,但由于我不能够更改SQL我想知道是否有任何“丑陋”的黑客可以覆盖关键字或动态转换SQL。
答案 0 :(得分:1)
您可以尝试使用十六进制编辑器编辑第三方应用程序。如果您找到字符串PLAN,请将其编辑为类似PPAN的内容,然后重命名表格,视图等。如果您抓住所有字符串,它可以正常工作。但是,当然这是一个丑陋的事情。
答案 1 :(得分:0)
我觉得你很害怕。我可以建议的唯一其他方法是
在网络数据包到达SQL Server之前拦截它,这显然非常复杂。请参阅https://reverseengineering.stackexchange.com/questions/1617/server-side-query-interception-with-ms-sql-server,特别是回答https://reverseengineering.stackexchange.com/a/1816
如果程序是Java或.Net应用程序,则反编译程序以进行更改。
答案 2 :(得分:0)
将第三方应用程序连接到使用linked tables的填充程序MS Access数据库,其中Access表只是对基础SQL Server表的传递。你想要做的是:
执行此操作后,第三方应用程序应该能够像往常一样说“Access SQL”。 Access负责T-SQL的“翻译”。生活很好。我怀疑你会受到一些性能影响,因为你通过Access代理所有内容,但我认为它不会很大。
这将是我的首选解决方案。
另一种选择是编写一个实现ODBC API的“shim”DLL,并简单地将实际调用包装到真正的ODBC驱动程序中。然后在调用包装的DLL方法之前捕获请求并根据需要改进它们。棘手的部分是你的第三方应用程序可能按顺序位置追踪列,或者可能按列名称追踪它们。或者混合。这意味着您可能需要在返回途中转换列名称,这可能比看起来更难。