SQL Server 2012关键字覆盖

时间:2013-09-28 23:43:57

标签: sql sql-server-2012

我已经知道的一个问题没有很好的答案。

我有第三方应用无法更改。应用程序的数据库已从MS Access转换为SQL Server 2012.该程序与ODBC连接,不关心后端。它发送了非常简单的SQL,似乎也适用于SQL Server。

但是有一个名为“PLAN”的表存在问题,我已经知道它是一个SQL Server关键字。

我知道您通常会使用方括号访问这样的表,但由于我能够更改SQL我想知道是否有任何“丑陋”的黑客可以覆盖关键字或动态转换SQL。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用十六进制编辑器编辑第三方应用程序。如果您找到字符串PLAN,请将其编辑为类似PPAN的内容,然后重命名表格,视图等。如果您抓住所有字符串,它可以正常工作。但是,当然这是一个丑陋的事情。

答案 1 :(得分:0)

我觉得你很害怕。我可以建议的唯一其他方法是

  1. 在网络数据包到达SQL Server之前拦截它,这显然非常复杂。请参阅https://reverseengineering.stackexchange.com/questions/1617/server-side-query-interception-with-ms-sql-server,特别是回答https://reverseengineering.stackexchange.com/a/1816

  2. 如果程序是Java或.Net应用程序,则反编译程序以进行更改。

答案 2 :(得分:0)

我怀疑你被软管了。你可以

  • 将第三方应用程序连接到使用linked tables的填充程序MS Access数据库,其中Access表只是对基础SQL Server表的传递。你想要做的是:

    • 更改SQL Server架构中的违规列名称。
    • 在Access
    • 中创建链接表
    • 在访问中创建一组视图/查询,其具有与第三方应用程序所期望的相同的架构。

    执行此操作后,第三方应用程序应该能够像往常一样说“Access SQL”。 Access负责T-SQL的“翻译”。生活很好。我怀疑你会受到一些性能影响,因为你通过Access代理所有内容,但我认为它不会很大。

    这将是我的首选解决方案。

  • 另一种选择是编写一个实现ODBC API的“shim”DLL,并简单地将实际调用包装到真正的ODBC驱动程序中。然后在调用包装的DLL方法之前捕获请求并根据需要改进它们。棘手的部分是你的第三方应用程序可能按顺序位置追踪列,或者可能按列名称追踪它们。或者混合。这意味着您可能需要在返回途中转换列名称,这可能比看起来更难。