В синтаксисе SQL «from» в «delete from» необязательно, если вы планируете использовать «где»? - PullRequest
15 голосов
/ 19 декабря 2010

Я новичок в SQL.У нас есть некоторый код, который должен работать на SQL Server 2005/2008, Oracle 10, а также Sybase.

Я писал сценарий, чтобы попытаться выяснить, какие таблицы изменяет данная хранимая процедура (но не удаляет)Например, insert, update и delete.

Один delete оказался озадачивающим - иногда я вижу такие утверждения, как:

delete phone_book where ... 

вместо:

delete from phone_book where ...

Итак ... действительно ли ключевое слово from действительно необязательно в этом случае?Это вызывает какие-либо проблемы?Это просто плохой стиль или это не имеет значения?

Я не нашел ссылку на T-SQL, которая сделала бы from необязательной.Я полагаю, что это то, что объединит всех трех поставщиков, о которых я упоминал выше.

Вопросы / комментарии / ссылки приветствуются (или это приветствуется?).

Ответы [ 3 ]

9 голосов
/ 19 декабря 2010

В этом месте FROM является необязательным ( SQL Server , Oracle , Sybase ).

Однако есть небольшие различия: например, Oracle позволяет назначать псевдоним имени таблицы, а SQL Server - нет;и другие вещи также немного отличаются.

Также обратите внимание, что ваш образец FROM отличается от следующего, где он является обязательным:

DELETE phone_book FROM some_table WHERE ...
6 голосов
/ 19 декабря 2010

Краткий ответ: Luceros ответ правильный: он необязательный

Я должен поддерживать sql и адаптировать его между sql-сервером и Oracle.Вот некоторые правила:

  1. Пишите сценарии вручную, не используйте сгенерированный код.
  2. Всегда используйте INSERT INTO.
  3. Всегда УДАЛЯЙТЕ - без FROM.
  4. Не использовать "- заключенный в кавычки идентификатор.
  5. Удалить все [] и dbo. (Имена схем)
  6. Внимание, когда вы видите DELETE ... FROM ...
  7. Внимание, когда вы видите UPDATE ... FROM ...
  8. ORACLE Операторы выбора нуждаются в предложении from, которое вы можете использовать из DUAL

    1. OK, вы можете написать скриптваши объекты и редактируйте их стандартным способом
      • USE [Current_DB] - вы не хотите, чтобы ссылка на вашу тестовую базу данных переходила в производственный скрипт
      • SET ANSI_NULLS ON - решите один раз, какойиспользуемые настройки - не включайте и не выключайте
      • SET QUOTED_IDENTIFIER ON - идентификаторы в кавычках чувствительны к регистру.
    2. Требуется INSERT INTO для Oracle.
    3. Это мой личный стиль, не используйте необязательное ключевое слово, изучите значения по умолчанию
    4. Вы должны цитироватьидентификатор, если вы используете одно из зарезервированных ключевых слов ORACLES в качестве имени столбца, мы ввели эту ловушку, и в долгосрочной перспективе было бы лучше переименовать столбец на стороне sql-Server.
    5. Oracle не делаетиспользуйте их.
    6. Oracle не поддерживает этот синтаксис.
    7. Oracle не поддерживает этот синтаксис.
3 голосов
/ 19 декабря 2010

Из документации Microsoft SQL Server, ОТ не является обязательным.

...