6

一个我已经知道没有漂亮答案的问题。

我有一个无法更改的第三方应用程序。应用程序的数据库已从 MS Access 转换为 SQL Server 2012。程序使用 ODBC 连接,不关心后端。它发送非常简单的 SQL,似乎在 SQL Server 上也能很好地工作。

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

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

4

3 回答 3

1

您可以尝试使用十六进制编辑器编辑第三方应用程序。如果您找到字符串 PLAN,请将其编辑为 PPAN 之类的内容,然后重命名表、视图等。如果您全部了解,它可以工作。但是,这当然是一件丑陋的事情。

于 2013-10-09T06:28:51.257 回答
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 应用程序,则反编译程序以更改它。

于 2013-10-24T22:18:44.710 回答
0

我怀疑你被水洗了。你可以

  • 将第 3 方应用程序连接到使用链接表的 shim MS Access 数据库,其中 Access 表只不过是底层 SQL Server 表的传递。你想做的是:

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


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

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

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

于 2013-10-24T22:39:55.773 回答