Вопрос:

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

sql tsql delete-row sql-delete

8640 просмотра

3 ответа

4602 Репутация автора

Я новичок в 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необязательным. Я полагаю, что это то, что объединит всех трех поставщиков, о которых я упоминал выше.

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

Автор: Hamish Grubijan Источник Размещён: 19.12.2010 05:44

Ответы (3)


9 плюса

52807 Репутация автора

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

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

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

DELETE phone_book FROM some_table WHERE ...
Автор: Lucero Размещён: 19.12.2010 05:48

3 плюса

29440 Репутация автора

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

Автор: Joel Spolsky Размещён: 19.12.2010 05:50

6 плюса

8278 Репутация автора

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

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

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

    1. ОК, вы можете писать сценарии и редактировать их стандартным способом.
      • 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 не поддерживает этот синтаксис.
Автор: bernd_k Размещён: 19.12.2010 05:59
Вопросы из категории :
32x32