22

私はSQLが初めてです。SQL Server 2005/2008、Oracle 10、および Sybase で動作するはずのコードがいくつかあります。

insert私は、特定のストアド プロシージャがどのテーブルを変更するか (ただし、ドロップしないか) を把握しようとするスクリプトを作成していましupdatedelete

1deleteつは不可解であることが判明しました - 時々、次のようなステートメントを目にします。

delete phone_book where ... 

とは対照的に:

delete from phone_book where ...

それで...fromこの場合、キーワードは本当にオプションですか?これにより問題が発生しますか? スタイルが悪いだけなのか、それとも関係ないのか。

オプションT-SQLになるような参照は見つかりませんでした。fromこれが、上で述べた 3 つのベンダーすべてを統合するものだと思います。

質問/コメント/リンクを歓迎します (または歓迎しますか?)。

4

4 に答える 4

13

ここでFROMはオプションです ( SQL ServerOracleSybase )。

ただし、微妙な違いがあります。たとえば、Oracle ではテーブル名にエイリアスを割り当てることができますが、SQL Server ではできません。他のものも少し異なります。

FROMまた、サンプルは必須である次のものとは異なることに注意してください。

DELETE phone_book FROM some_table WHERE ...
于 2010-12-19T17:48:19.640 に答える
10

短い答え: ルセロスの答えは正しいです: それはオプションです

SQLを維持し、SQLサーバーとOracleの間で適応させる必要があります。以下にいくつかのルールを示します。

  1. スクリプトは手動で作成し、生成されたコードは使用しないでください。
  2. 常に INSERT INTO を使用してください。
  3. 常に削除 -- FROM なし。
  4. " - 引用符で囲まれた識別子は使用しないでください。
  5. [ ] と dbo をすべて削除します。(スキーマ名)
  6. DELETE ... FROM ... が表示された場合の注意
  7. UPDATE ... FROM ... が表示された場合の注意
  8. ORACLE Select ステートメントには、DUAL から使用できる from 句が必要です

    1. オブジェクトをスクリプト化し、標準的な方法で編集できます
      • USE [Current_DB] -- テスト データベースへの参照を本番スクリプトに入れたくない
      • SET ANSI_NULLS ON -- 使用する設定を一度決定 -- オンとオフを切り替えない
      • SET QUOTED_IDENTIFIER ON -- 引用符で囲まれた識別子は大文字と小文字が区別されます。
    2. Oracle では INSERT INTO が必要です。
    3. それが私の個人的なスタイルです オプションのキーワードを使用せず、デフォルトを学びます
    4. 識別子を引用する必要があります.ORACLESの予約キーワードの1つを列名として使用する場合、その落とし穴に入りました.長期的には、SQLサーバー側で列の名前を変更する方が良いでしょう.
    5. Oracle はこれらを使用しません。
    6. Oracle はこの構文をサポートしていません。
    7. Oracle はこの構文をサポートしていません。
于 2010-12-19T17:59:56.260 に答える
2

Microsoft SQL Server のドキュメントによると、FROM はオプションです。

于 2010-12-19T17:50:18.447 に答える