将行插入带有标识列的表中

时间:2014-03-16 10:17:05

标签: sql sql-server

我的表是这样的:

CREATE TABLE studio(

    s_id           int NOT NULL IDENTITY(1,1),
    name           varchar(30),
    country        varchar(15),
    income_money   float(53),
    movies         int,

    CONSTRAINT primaryKeyStudio PRIMARY KEY(s_id)
)

我想在table studio中插入值,这样更好:

INSERT INTO studio VALUES ('Walt Disney Studios','USA',45041000.99,50)
INSERT INTO studio VALUES ('Warner Bros Studios','London',30205000.76,60)
INSERT INTO studio VALUES ('Universal Studios','Hollywood',50235499.87,80)

或者这样:

INSERT INTO studio(name,country,income_money,movies) VALUES ('Walt Disney Studios','USA',45041000.99,50)
INSERT INTO studio(name,country,income_money,movies) VALUES ('Warner Bros Studios','London',30205000.76,60)
INSERT INTO studio(name,country,income_money,movies) VALUES ('Universal Studios','Hollywood',50235499.87,80)

3 个答案:

答案 0 :(得分:2)

第二种方式,即这一次

INSERT INTO studio(name,country,income_money,movies) VALUES ('Walt Disney Studios','USA',45041000.99,50)

,无论标识列如何,显式列出列名都会更好,原因如下:

  • 更具可读性 - 根本不熟悉该表的用户可以将这些值与其含义相匹配,
  • 用户无需记住表格中的列 - 熟悉您的表格的用户可以更轻松地扩展您的INSERT以使用其他列
  • 更改架构不会破坏此INSERT - 有人在中间添加一列不会破坏您现有的代码。

答案 1 :(得分:0)

第一种方法需要为每列提供一个值。如果向表中添加了新列,则必须重写所有insert语句以包含新列。使用第二种方法编写的语句将保持有效,因为它们明确指定了列。

我建议使用第二种方法。

答案 2 :(得分:0)

你的第二种方法总是更好,因为如果你错误地插入一行,插入就会发生,因此很难找到缺失的值

而在第二种方法中,您最初自己知道必须插入的确切值