INSERT INTO ... SELECT ...总是按顺序位置匹配字段?

Hei*_*nzi 17 sql t-sql sql-server insert-into

我的测试似乎证实了这一点

INSERT INTO a (x, y) SELECT y, x FROM b
Run Code Online (Sandbox Code Playgroud)

映射b.ya.x,即字段仅按顺序位置匹配,而不是按名称匹配.总是如此,即我可以依赖这种行为吗?不幸的是,文档没有指定这个(或者我没有找到它).

Aar*_*and 15

这是正确的,SQL Server不会尝试对列名进行任何映射,因为您可以将任何别名应用于您喜欢的源数据.它总是会引用顺序位置.


Mat*_*lie 10

是的,你是对的.

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
Run Code Online (Sandbox Code Playgroud)