将数据插入SQL Server表时,是否可以指定要将数据插入到哪一列?
对于一张 table
我知道您可以使用以下语法:
INSERT INTO MyTable (Name, col4_on, col8_on, col9_on)
VALUES ('myName', 0, 1, 0)
但是,当您有很多列时,尤其是当它们具有二进制数据时,上述语法变得笨拙。很难将哪个1和0与哪个列匹配。我希望有一个类似于语法的命名参数(类似于C#的语法),它看起来像下面的样子:
INSERT INTO MyTable
VALUES (Name: 'myName', col4_on: 0, col8_on: 1, col9_on: 0)
谢谢
最佳答案
您必须指定列名称。但是,有一个异常(exception)。如果以与表中相同的顺序插入与目标表完全相同的列数,请使用以下语法:
INSERT INTO MyTable
VALUES ('val1A', 'val4A', 'val8A')
请注意,这是执行
INSERT
的脆弱方法,因为如果该表发生更改,或者如果列在不同系统上的排序不同,则INSERT
可能会失败甚至更糟-可能会将错误的数据放入每个列中。我发现,当我对许多列进行
INSERT
编码时,如果可以对它们进行分组,我会发现这些查询更易于阅读。如果列名很长,我可以将它们放在单独的行上,如下所示:INSERT INTO MyTable
(
MyTable_VeryLongName_Col1,
MyTable_VeryLongName_Col4,
MyTable_VeryLongName_Col8,
-- etc.
)
SELECT
Very_Long_Value_1,
Very_Long_Value_4,
Very_Long_Value_8,
-- etc.
或者,您可以将一行中的2列分组,或者在每5行上放置空格,或者在每10行上注释,等等。
如果在插入很多行时发现列名繁琐,请尝试将数据链接在一起:
INSERT INTO MyTable (col1, col4, col8)
VALUES ('val1A', 'val4A', 'val8A'),
('val1B', 'val4B', 'val8B'),
-- etc.
或者一起对它们进行
UNION
编码:INSERT INTO MyTable (col1, col4, col8)
SELECT 'val1A', 'val4A', 'val8A'
UNION ALL 'val1B', 'val4B', 'val8B'
UNION ALL ... -- etc.
或者,从另一个表中选择它们:
INSERT INTO MyTable (col1, col4, col8)
SELECT val1, va4, val8
FROM MyOtherTable
WHERE -- some condition is met
关于sql - SQL:如何将数据插入具有列名称的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20621792/