SQL Server 2012关键字override

6

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

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

然而,有一个表格的名称为“PLAN”,我已经知道这是SQL Server关键字。

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


你试过在关键词周围加方括号吗?我有一个名为user的表格,我总是要写成:dbo.[User] - James A Mohler
1
我删除了我的回答,因为现在我更清楚你想做什么了。问题是你不能更改你的SQL,因为它的写法似乎并不是一个问题,因为它是从Access转换而来的,其中“PLAN”不是关键字。现在它存在于SQL中,其中“PLAN”是一个关键字,而且无法更改SQL,所以你需要“覆盖”“PLAN”关键字。这准确吗? - misterManager
假设您无法更改SQL,那么您可以更改什么呢? - RBarryYoung
3个回答

1
你可以尝试使用十六进制编辑器编辑第三方应用程序。如果找到字符串PLAN,则将其编辑为类似PPAN的内容,然后重命名表格、视图等。如果全部都找到并修改,可能会起作用。但这样做显然很丑陋。

0

0

我怀疑你的情况很糟糕。你可以

将第三方应用程序连接到使用链接表的Shim MS Access数据库,其中Access表只是底层SQL Server表的一个通行证。您想要做的是:
- 在SQL Server模式中更改有问题的列名。 - 在Access中创建链接表。 - 在Access中创建一组视图/查询,其模式与第三方应用程序所期望的相同。
做完这些,第三方应用程序应该能够像以前一样讲“Access SQL”。Access会处理到T-SQL的“翻译”。生活很美好。我怀疑你会遇到一些性能问题,因为你正在通过Access代理所有内容,但我认为不会很大。
那就是我喜欢的解决方案。
另一个选择是编写实现ODBC API的“shim” DLL,并简单地包装对真正ODBC驱动程序的实际调用。然后,在调用包装的DLL方法之前捕获请求并根据需要进行改进。棘手的部分是,您的第三方应用程序可能会按序数位置或按列名获取列。或混合使用。这意味着您可能需要在返回时转换列名称,这可能比看起来更困难。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接