FAQ - Вопросы - ответы - советы - Базы данных
Вопрос:
[SQL] При попытке выполнения такого оператора SQL - "DELETE FROM T39 T39C0 WHERE T39C0.F1LHT35=253291661" SQL-сервер ругается на недопустимый синтаксис. В чем я неправ?
Ответ:
В данном случае, видимо, T39C0 расценивается как псевдоним.
Но стандартом SQL-92 такое запрещено в DELETE. Цитата собственно из этого стандарта (сборник из DELETE и NAMES AND IDENTIFIERS, определение IDENTIFIER пропущено, просто набор Стандартом запрещено вот такое SELECT TEST.A, P_TEST.A FROM TEST P_TEST; вот это не по стандарту, хотя MS такое ест.
FORMAT
<DELETE STATEMENT: POSITIONED>::=
DELETE FROM <TABLE NAME> WHERE CURRENT OF <CURSOR NAME>
<TABLE NAME> ::= <QUALIFIED NAME> | <QUALIFIED LOCAL NAME>
<QUALIFIED NAME> ::= [<SHEMA NAME><PERIOD>] [<QUALIFIED IDENTIFIER>]
<QUALIFIED IDENTIFIER> ::=<IDENTIFIER>
<SHEMA NAME>::=[<CATALOG NAME><PERIOD>]<UNQUALIFIED SHEMA NAME>
<UNQUALIFIED SHEMA NAME>::=<IDENTIFIER>
<CATALOG NAME>::=<IDENTIFIER>
<QUALIFIED LOCAL NAME>::= MODULE <PERIOD><LOCAL TABLE NAME>
<LOCAL TABLE NAME>::=<QUALIFIED IDENTIFIER>