2010-12-19 19 views
9

Jestem nowy w SQL. Mamy pewien kod, który powinien działać na SQL Server 2005/2008, Oracle 10 oraz Sybase.W składni SQL jest "od" w "usuń z" opcjonalne, jeśli planujesz użyć "gdzie"?

Pisałem skrypt, aby dowiedzieć się, które tabele danej procedury przechowywanej modyfikuje (ale nie upuszcza), np. insert, i delete.

delete jeden okazał się być zaskakujący - czasami widzę stwierdzenia typu:

delete phone_book where ... 

w przeciwieństwie do:

delete from phone_book where ... 

więc ... jest from kluczowe naprawdę opcja w tym przypadku? Czy to powoduje problemy? Czy to po prostu zły styl, czy nie ma to znaczenia?

Nie znalazłem odniesienia do T-SQL, które mogłyby opcjonalnie uczynić from. Przypuszczam, że właśnie to zjednoczyłoby wszystkich trzech sprzedawców, o których wspomniałem powyżej.

Pytania/komentarze/linki są mile widziane (lub są mile widziane?).

+1

Nie wspomniałeś o wersjach Oracle i Sybase, które musisz wspierać. –

Odpowiedz

7

W tym miejscu FROM jest opcjonalny (SQL Server, Oracle, Sybase).

Istnieją jednak subtelne różnice: Oracle na przykład umożliwia przypisanie aliasu do nazwy tabeli, gdzie SQL Server nie ma; i inne rzeczy też są trochę inne.

Należy również pamiętać, że próbka FROM jest differnet z następujących gdzie jest to obowiązkowe:

DELETE phone_book FROM some_table WHERE ... 
+0

proszę opracować na ostatnim przykładzie, który podałeś do tej pory. Czy to spowoduje, że wszystkie wiersze w '' some_table' phone_book nie będą miały wartości NULL, plus inne warunki? Chyba nie rozumiem zalet tego szczególnego przypadku. Dlaczego nie byłoby po prostu 'delete from some_table where ...'? –

+2

@Hamish, proszę spojrzeć na trzy linki, które zamieściłem w pierwszym wierszu. Moja 'some_table' jest tabelą źródłową, której można użyć do uzyskania wartości dopasowanych w klauzuli" WHERE ", aby przefiltrować elementy do usunięcia z' phone_book'. Może to być również napisane jako: "DELETE FROM phone_book FROM some_table WHERE ..." - ale jak napisałem, tylko pierwsze 'FROM' jest opcjonalne w tym przypadku. – Lucero

2

Z dokumentacji Microsoft SQL Server, FROM is optional.

+0

Łączenie z odniesieniem do programu SQL Server 2000 i pomijanie innych dostawców nie wydaje się być kompletną odpowiedzią? – Lucero

+0

@ Lucero, ostrożnie - był w armii izraelskiej i zna Krav Maga. –

+1

@Hamish, wiem, kim jest Joel, ogólnie miły facet i świetny pisarz, a ja jestem klientem jego firmy od około 2002 roku. Wciąż nie sądzę, że ta odpowiedź faktycznie odpowiada na twoje pytanie. – Lucero

5

Krótka odpowiedź: Luceros odpowiedź jest poprawna: jest optinal

Mam do utrzymania sql i dostosowania go między serwer sql i Oracle. Oto kilka zasad: Kod

  1. pisać skrypty ręcznie, nie używaj generowane
  2. Allways użycie INSERT INTO
  3. Allways DELETE - bez OD
  4. Nie używaj "- cytowany identyfikator
  5. Usuń wszystkie [] i dbo.
  6. Uwaga, gdy zobaczysz USUŃ ... OD ...
  7. Uwaga, gdy widzisz AKTUALIZACJĘ ... OD ...
  8. ORACLE SELECT muszą klauzuli FROM można korzystać z DUAL

    1. OK Możesz skryptów obiektami i edytować je w standardowy sposób
      • USE [Current_DB] - nie chcesz odniesienie do bazy testowej przejść do scenariusza produkcji
      • SET ANSI_NULLS oN - kiedyś zdecydować, które ustawienia w użyciu - nie włącza się i wyłącza
      • SET qUOTED_IDENTIFIER oN - notowane identyfikatory są piszemy drukowanymi literami
    2. INSERT INTO jest wymagane przez Oracle
    3. To jest mój osobisty styl nie używać optinal słowa kluczowego, aby dowiedzieć się domyślnie
    4. trzeba zacytować identyfikator, jeśli używasz jednego z wyroczni zastrzeżone słowa kluczowe jak kolumny Nam e weszliśmy tej pułapki i na dłuższą metę byłoby lepiej, aby zmienić nazwę kolumny po stronie SQL Server
    5. ORACLE nie korzysta z nich
    6. Oracle nie obsługuje tej składni
    7. Oracle robi obsługuje tę składnię
+0

dzięki ... proszę o szczegóły? Nawiasem mówiąc, "nie używaj wygenerowanego kodu" wymagałoby cofnięcia się kilku lat życia :) Jak już powiedziałem, jestem nowy w SQL. Wyjaśnij, dlaczego wymyśliłeś te zasady. –

+0

Bardzo fajnie! Chciałbym oddać więcej głosów niż raz. –