是否可以在SELECT语句中为INSERT语句指定列列表?

时间:2019-10-07 03:55:30

标签: tsql sql-server-2016

我必须生成一个动态生成的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语句中包含各列,我可以一次完成所有工作,而无需编写2行。显然我的想法行不通,我试图弄清楚是否有可能实现类似的目标,或者我需要坚持第一个。

非常感谢。

1 个答案:

答案 0 :(得分:1)

insert语句的最佳实践是在insert子句中指定列列表,这有很好的理由:

  1. 它更具可读性。您确切知道哪个值进入哪个列。
  2. 您不必为可为空的\默认值列提供值。
  3. 您不受表中各列的约束。
  4. 如果将一列添加到表中,则您的insert语句可能不会中断(如果新添加的列不可为空且没有默认值,则它将中断)。
  5. 在某些情况下,SQL Server要求您明确指定列列表,例如将identity_insert设置为on时。

在任何情况下,select语句的insert...select子句中的列名或别名对于value列应到达的目标列没有任何影响。值仅根据它们在语句中的位置定向到目标。