2012-03-21 7 views
12

私のテストでは、INSERT INTO ... SELECT ...は常にフィールドを順序位置で一致させますか?

INSERT INTO a (x, y) SELECT y, x FROM b 

マップb.ya.xに、すなわち、フィールドは唯一の順序位置ではなく名前で一致していることを確認するように見えます。これはいつものケースですか、つまりその行動に頼ることができますか?残念ながら、the documentationはこれを指定していません(または見つからなかった)。

+2

私は常に序数だと思うと思います。 –

+0

bにxまたはyがない場合を考えてみましょう。序数は意味をなさない唯一の方法です。 INSERT INTO a(x、y)SELECT f、g FROM b – Paparazzi

答えて

12

これは間違いありません。あなたが好きなソースデータにエイリアスを適用できるので、SQL Serverは列名のマッピングを実行しようとしません。それは常に序数の位置を参照します。

3

はい。これは序数の位置を使用していないためです。まず、bから選択し、列名を使用しないでください.SQLは列名を使用して項目を解決しないため(異なる列名の結合を行うことができます)。 それから、選択をbで指定したのと同じ方法で、aにデータを追加します。実際には、注文を変更すると他の順序で挿入されます)。..

+0

+1 "順序位置を使用していないため" – onedaywhen

7

はい、正しいです。

INSERT INTOステートメントのフィールドの順序は、テーブル定義と一致する必要はありません。

ただし、SELECTのエイリアス/フィールド名は無視され、値はINSERT INTOステートメントで指定されたフィールドに挿入されます。

CREATE TABLE test (
    a  AS INT, 
    b  AS INT, 
    c  AS INT 
) 
INSERT INTO 
    test (
    b, 
    c, 
    a 
) 
SELECT 
    1 AS a, 
    2 AS b, 
    3 AS c 

SELECT * FROM test 

a | b | c 
---+---+--- 
3 | 1 | 2 
関連する問題