使用INSERT INTO插入具有不同表头的VALUES的多行

时间:2020-06-06 13:58:03

标签: sql sql-server tsql ssms sql-insert

我不知道问这个问题是否很奇怪,但是我遇到了我试图找出的问题。我试图在网上浏览任何示例(找不到任何示例),因此导致我在这个论坛中提问。

这就是问题所在:

我有一个看起来像这样的SQL表:

CREATE TABLE product 
(
    productName VARCHAR(100) PRIMARY KEY NOT NULL,
    productDescription VARCHAR(1000) NOT NULL,
    "weight" INTEGER NULL,
    volume INTEGER NULL,
    sizeInformation VARCHAR(1000) NULL,
    brandName VARCHAR(100) NOT NULL,
    FOREIGN KEY (brandName) REFERENCES brand(brandName)
);

我有一个INSERT语句,如下所示:

BEGIN TRANSACTION;
    INSERT INTO product 
    VALUES ("Power Gel Laundry Detergent - Anti-Bacterial", "Anti-Bacterial", 10, "Dynamo"),
           ("Power Gel Laundry Detergent - Anti-Bacterial", "Anti-Bacterial", 15, "CloroxLOL");
    COMMIT;

因此,对于第一个INSERT VALUES语句(其数字为 10 ),我想将该数字 10 放入product(weight),然后对于第二条INSERT VALUES语句(其编号为 15 ),我想将该编号 15 放入product(volume)

有什么办法吗?

1 个答案:

答案 0 :(得分:4)

我想你想要

insert into product (productName, productDescription, weight, volume, brandName)
values 
    ('Power Gel Laundry Detergent - Anti-Bacterial', 'Anti-Bacterial', 10, null, 'Dynamo'),
    ('Power Gel Laundry Detergent - Anti-Bacterial', 'Anti-Bacterial', null, 15, 'CloroxLOL');

想法是在目标列表中同时包含两列,并使用null值调整值列表。

您还可以有两个单独的inserts语句,它们具有不同的目标列列表(尽管输入的时间更长):

insert into product (productName, productDescription, weight, brandName)
values ('Power Gel Laundry Detergent - Anti-Bacterial', 'Anti-Bacterial', 10, null, 'Dynamo');

insert into product (productName, productDescription, volume, brandName)
values ('Power Gel Laundry Detergent - Anti-Bacterial', 'Anti-Bacterial', null, 15, 'CloroxLOL');

注意:

  • 始终在insert语句中枚举目标列的列表-如果没有目标列表,数据库希望您提供所有列的值;您原来的查询已经无效(有4个值,而表有6列)

  • 对文字字符串使用单引号而不是双引号(尽管某些数据库支持双字符串)-这是SQL标准,所有数据库均支持

  • 在定义数据库对象(表,列)时避免双引号:它们会使事情变得更复杂,通常没有好处

相关问题