将行添加到具有自动递增列的表的语法是什么?

时间:2015-05-08 15:49:38

标签: sql sql-server database

我是SQL的新手,对于如何在具有自动增量列的表中插入行有疑问。在我的脚本中,我创建了表

CREATE TABLE orgs ( O_Id int NOT NULL identity(1,1), org varchar (255) NOT NULL, PRIMARY KEY (O_Id) );

应该看起来像

                   orgs
-----------------------------------------------------
      O_Id           |            orgname
-----------------------------------------------------
        1            |          "StackOverflow"
-----------------------------------------------------
        2            |          "Madoff Investments"

但是,我不知道如何在此表中插入行。 W3Schools显示语法

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

但我不确定当其中一列自动递增时如何使用它。我试过了

INSERT INTO orgs (O_id, orgname) VALUES (DEFAULT, 'StackOverflow');

但得到错误

  

不允许使用DEFAULT或NULL作为显式标识值。

我也试过覆盖,

INSERT INTO orgs (O_id, orgname) VALUES (1, 'StackOverflow');

但得到错误

  

无法在表'orgs'中为identity列插入显式值   IDENTITY_INSERT设置为OFF。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

insert orgs 
        (orgname) 
    values 
        ('StackOverflow')

这是IDENTITY指定的好处;这些值会递增并自动为您分配。

现在,如果您确实需要插入特定值(例如,您使用已知数据或其他东西重新播种模板数据库),您可以执行以下操作:

set @@IDENTITY_INSERT orgs ON
insert orgs 
        (O_id, orgname) 
    values 
        (1, 'StackOverflow')
set @@IDENTITY_INSERT orgs OFF

为该表设置@@IDENTITY_INSERTON意味着允许您设置特定值。通常情况下,你不会这样做。

答案 1 :(得分:0)

语法时才:
INSERT orgs
VALUES('nextOrg')

如果该字段是auto-inc,则只需在INSERT命令上忽略它。