sql - SQL:如何将数据插入具有列名称的表中

标签 sql sql-server

将数据插入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/

相关文章:

mysql - 在 mysql 中每天删除除 max(timestamp) 之外的所有行

mysql - SQL Server和MYSQL之间的复制

sql - MERGE 语句尝试多次更新或删除同一行 > 一次

sql - 我需要为每个单词的 SQL AND 条件使用逗号分隔的字符串

php - 数据插入每次重新加载页面

javascript - mysql在报告时间之间工作时间不方便

sql - 当表本身存在外键约束时,postgresql 多次插入如何工作?

sql - 查询表中每列的填充行数 (SQL Server)

c# - SQL Server报告对齐到网页中心

mysql - 2 LEFT OUTER JOIN 在同一张表上卡住服务器