我必须生成一个动态生成的 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 行单独的行。 显然我的想法行不通,我试图弄清楚类似的事情是否可能,或者我需要坚持第一个。
非常感谢。
insert
语句的最佳做法是在insert
子句中指定列列表,并且出于很好的理由:
- 它的可读性要高得多。您确切地知道什么值进入了哪一列。 不必
- 向可为 null \ 默认值的列提供值。
- 您不受表中列顺序的约束。
- 如果将列添加到表中,则 insert 语句可能不会中断(如果新添加的列不可为空且没有默认值,则不会中断(。
- 在某些情况下,SQL Server 会要求您显式指定列列表,例如当
identity_insert
设置为on
时。
在任何情况下,insert...select
语句的select
子句中的列名或别名对值列应转到的目标列没有任何影响。 值仅根据其在语句中的位置定向到目标。