Можно ли указать список столбцов для оператора INSERT в операторе SELECT? - PullRequest
0 голосов
/ 07 октября 2019

Мне нужно создать динамически генерируемый скрипт T-SQL, который вставляет записи в различные таблицы. Я выполнил кучу поиска и тестирования, но, похоже, не могу найти нужный мне путь.

Я знаю, что допустимым является следующее SQL:

INSERT INTO [MyTable] ( [Col1], [Col2], [Col3] )
SELECT N'Val1', N'Val2', N'Val3';

НоМожно ли вообще написать что-то похожее на это:

INSERT INTO [MyTable]
SELECT [Col1] = N'Val1', [Col2] = N'Val2', [Col3] = N'Val3';

Имея столбцы в операторе select, я могу сделать все сразу, вместо написания двух отдельных строк. Очевидно, моя идея не работает, я пытаюсь выяснить, возможно ли что-то подобное, или мне нужно придерживаться первого.

Очень ценится.

1 Ответ

1 голос
/ 07 октября 2019

Лучшая практика для операторов insert состоит в том, чтобы указывать список столбцов в предложении insert по очень веским причинам:

  1. Это гораздо более читабельно. Вы точно знаете, какое значение входит в какой столбец.
  2. Вам не нужно указывать значения для значений столбцов, которые могут иметь значение nullable \ default.
  3. Вы не привязаны к порядку столбцов втаблица.
  4. Если в таблицу добавлен столбец, оператор вставки может не сломаться (Это произойдет, если вновь добавленный столбец не имеет значения NULL и не имеет значения по умолчанию).
  5. В некоторых случаях SQL Server требует, чтобы вы указали список столбцов в явном виде, например, когда identity_insert имеет значение on.

И в любом случае имена или псевдонимы столбцов в select Предложение оператора insert...select не влияет на то, к каким целевым столбцам должен обращаться столбец значения. значения направлены на цель только на основании их местоположения в выписке.

...