Does INSERT INTO … SELECT … always match fields by ordinal position?

前端 未结 3 603
太阳男子
太阳男子 2021-02-18 16:16

My tests seem to confirm that

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

maps b.y to a.x, i.e., the fields are matched o

相关标签:
3条回答
  • 2021-02-18 16:30

    Yes. It's because is not using ordinal position, it's just resolving the query by parts. First it Select from b, not taking into accounts columns names, since SQL don't resolve things using column names (you can make joins of different columns names). Then it will add the data to a, in the same way you specify the select in b. In fact, if you change the order, it will be inserted in other order ;)..

    0 讨论(0)
  • 2021-02-18 16:42

    That is correct, SQL Server does not try to do any mapping of column names since you can apply any aliases to the source data that you like. It will always reference ordinal position.

    0 讨论(0)
  • 2021-02-18 16:48

    Yes, you are correct.

    The order of the fields in the INSERT INTO statement does not need to match the table definition.

    But the alias/field names of the SELECT will be ignored, and the values inserted into the fields named by the INSERT INTO statement.

    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
    
    0 讨论(0)
提交回复
热议问题