【问题标题】:Column/table delimiters in Access 2007, Oracle, and SQL ServerAccess 2007、Oracle 和 SQL Server 中的列/表分隔符
【发布时间】:2012-01-10 18:43:41
【问题描述】:

问题

我正在尝试动态构建一些需要使用列/表分隔符的 SQL 语句,以便我们可以使用两个单词或特殊保留关键字等的表名。(我不知道,因为表它映射到,将是客户端上的现有数据)

当我只支持 Access 2007 和 SQL Server 时,我使用方括号 [ ]:

select [Unit Price] from [Products] where [Unit Price] < @UnitPriceLimit

但是现在我也要支持Oracle,Oracle不允许我使用方括号。

我发现 Oracle 确实允许我使用双引号:

select "Unit Price" from "Products" where "Unit Price" < @UnitPriceLimit

SQL Server 也支持此功能,但默认情况下不支持,仅当您翻转某个选项时,引用标识符; Access 2007 中根本不支持双引号(据我所知,也许我错过了一个选项?)。

问题

有谁知道我可以跨平台使用的标识符吗?
或者至少对所有 3 个相关平台都通用? (Oracle、Access 2007+、SQL Server 2008+)

【问题讨论】:

  • 我知道答案是否定的,抱歉。
  • 补充一下 Marco 所说的:据我所知,双引号是 ANSI 引用标识符的标准。因此,如果您不能在 MS Access 中使用它们,它们可能不是跨平台标准。您是否考虑过使用下划线字符作为单词分隔符?
  • Nope MySQl 例如默认使用反引号。如果您无法控制 db 对象名称,则检测和配置是您唯一的选择。
  • 不幸的是,我无法控制客户为他们的表使用的内容,我正在映射到预先存在的数据、预先存在的表,它可以被命名为任何东西。

标签: sql database oracle sql-server-2008 ms-access-2007


【解决方案1】:

很遗憾,您找不到。最好的办法是实现 decorator pattern 并根据每个 DBMS 划分名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    相关资源
    最近更新 更多