Минус / дефис в имени таблицы в запросе SQL - PullRequest
2 голосов
/ 05 марта 2020

Я только что понял, что мои SQL операторы, содержащие знак минуса "-" в именах таблиц, выполняются без ошибок. Например:

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

также с использованием объектов adodb:

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

... пока у меня нет таблицы с именем MYTAB-10, только MYTAB. Я действительно удивлен, так как никогда не слышал ни о каких операторах в названии таблицы, написанных так. Количество строк в обеих версиях (с - и без) и независимо от количества в конце одинаково, так что же здесь на самом деле происходит? Я не нашел никакой информации об этом до сих пор. Есть ли какое-то объяснение этому?

1 Ответ

2 голосов
/ 05 марта 2020

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

Поскольку ADO автоматически добавляет SELECT * FROM, если вы просто предоставляете имя таблицы, это эквивалентно.

Однако: НИКОГДА не используйте это. Это поведение не было стандартизировано и сделает ваш код непереносимым, так как другие СУБД будут иметь синтаксическую ошибку на нем.

Также обратите внимание, что это не работает в ADO при непосредственном открытии таблицы вместо использования автоматического сгенерированный оператор SQL:

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

Также обратите внимание: символ + демонстрирует аналогичное поведение. Однако \, : и * этого не делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...