sql >> データベース >  >> RDS >> Sqlserver

INSERTステートメントの列リストでドット区切りのプレフィックスが無視されるのはなぜですか?

    ありそうもない 疑わしいユーティリティを考えると、SQL標準の一部になること(特にチェックしていませんが)。

    最も可能性が高いのは、列の仕様の最終ではない部分が不要であるために破棄されていることです。 明示的に insert into SomeTableを使用して、挿入するテーブルを指定しました コマンドの一部であり、それは 使用されるテーブル。

    ここで行ったように見えるのは、読みにくいが実際の利点がないSQLコマンドを実行する方法を見つけることです。その意味では、Cコードに似ているように見えます:

    int nine = 9;
    int eight = 8;
    xyzzy = xyzzy + nine - eight;
    

    これはおそらくxyzzy++;と書く方がよいでしょう。 :-)

    私はそれにまったく依存しません、おそらく 標準ではありませんが、ほとんど なぜなら、メンテナンスが簡単ではなく難しくなり、世界中のDBAが私を追跡し、IBM DB2マニュアルで私を殴り殺してしまうことを知っているからです。膨大なサイズと頭蓋骨を粉砕する能力のために、武器を選択しました:-)

    私は 少なくともSQL03言語を規定するISO9075-2:2003については、非特定的にチェックされています。

    セクション14.8 その規格のinsertをカバーしています ステートメントであり、次の条項が関連している可能性があるようです:

    膨大な時間を費やすことなく(そのドキュメントは1,332ページの長さであり、適切に消化するのに数日かかるでしょう)、このコラムは 列名の最後の部分を使用して(すべての所有者/ユーザー/スキーマ仕様を削除することにより)識別されます。

    特に、1つのターゲットテーブルのみが可能であるように見えるため(テーブルの境界を越えて更新可能なビューにもかかわらず):

    <insertion target> ::= <table name>
    

    公正な警告:私は標準のその後の反復をチェックしていないので、状況が変わった可能性があります。ただし、この機能を使用する実際の使用例はないように思われるため、その可能性は低いと思います。



    1. MySQL構文エラーメッセージオペランドには1つの列が含まれている必要があります

    2. フルパスからファイル名とパスを解析します

    3. ここにNullPointerExceptionがあるのはなぜですか?

    4. System.Data.OracleClient名前空間は廃止されましたか?