Подтвердить что ты не робот

INSERT INTO... SELECT... всегда соответствуют полям по порядковой позиции?

Мои тесты, похоже, подтверждают, что

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

отображает b.y в a.x, т.е. поля сопоставляются только по порядковому положению, а не по имени. Это всегда так, то есть я могу полагаться на это поведение? К сожалению, документация не указывает это (или я его не нашел).

4b9b3361

Ответ 1

Правильно, SQL Server не пытается сопоставить имена столбцов, так как вы можете применить любые псевдонимы к исходным данным, которые вам нравятся. Он всегда будет ссылаться на порядковое положение.

Ответ 2

Да, вы правы.

Порядок полей в инструкции 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

Ответ 3

Да. Это потому, что не использует порядковое положение, оно просто разрешает запрос по частям. Сначала выберите "Выбрать" из "b", не принимая имена столбцов учетных записей, поскольку SQL не разрешает действия с именами столбцов (вы можете создавать объединения разных имен столбцов). Затем он добавит данные в a, так же, как вы укажете выбор в b. Фактически, если вы измените заказ, он будет вставлен в другом порядке;)..