首页 > 解决方案 > SQL查询中表名中的减号/连字符

问题描述

我刚刚意识到我在表名中包含减号“-”的 SQL 语句执行时没有错误。例如:

SELECT * from MYTAB-10;
SELECT * from MYTAB-9;

还使用 adodb 对象:

rst.Open "MYTAB-10",conn, adOpenDynamic, adLockOptimistic 

...虽然我没有名为 MYTAB-10 的表,但只有 MYTAB。我真的很惊讶,因为从未听说过这样写的表名中的任何运算符。两个版本中的行数(带 - 和不带),不管最后的数字是相同的,那么这里到底发生了什么?到目前为止,我还没有找到任何有关它的信息。这背后有什么理由吗?

标签: ms-access

解决方案


Access 自动解释之前的分词-

这表示:

SELECT * from MYTAB-10

相当于以下查询

SELECT * FROM MYTAB -10 -- Space added
SELECT * from [MYTAB] AS [-10] -- Explicit alias to make meaning more clear

这也意味着您可以编写以下内容

SELECT [-10].SomeField FROM MYTAB-10 INNER JOIN MYTAB-11 ON [-10].SomeField = [-11].AnotherField

SELECT * FROM如果您只提供表名,ADO 会自动添加,这是等效的。

但是:永远不要使用它。此行为尚未标准化,并且会使您的代码不可移植,因为其他 RDBMS 会在其上出现语法错误。

另请注意,当直接打开表而不是使用自动生成的 SQL 语句时,这在 ADO 中不起作用:

Set rst = CurrentProject.Connection.Execute("MYTAB-10", Options := adCmdTableDirect)
'Errors: cannot find input table or query MYTAB-10

另请注意:+角色表现出相似的行为。但是,\:*


推荐阅读