如何将多行插入现有表

时间:2012-10-23 18:20:26

标签: sql sql-server-2008

您好我正在尝试使用此命令将10000条记录插入到表中。

CREATE TABLE mytable(
    id            INTEGER      PRIMARY KEY,
    TEXT          INTEGER       NOT NULL,
    OLDID         iNTEGER       NOT NULL,
    Firstname      VARCHAR(50)  NOT NULL,
    Middlename    VARCHAR(50)   NULL,
    last_name     VARCHAR(75)   NOT NULL,
    EMAIL         VARCHAR(225)  NOT NULL,
    STATUS        BOOL          NOT NULL
);

DECLARE @i int
declare @rows_to_insert int
SET @i = 6
set @rows_to_insert = 10000

WHILE @i < @rows_to_insert
    BEGIN
        INSERT INTO mytable VALUES (@i, @i,@i,'john'+@i,null,'Test','john'+@i+'@someone.com','Active');
        set @i = @i+1
    END

但我得到了这个错误。

  

Msg 8101,Level 16,State 1,Line 8   只有在使用列列表并且IDENTITY_INSERT为ON时,才能指定表'mytable'中标识列的显式值。

3 个答案:

答案 0 :(得分:4)

该表有一个标识列。您需要在insert语句中显式声明其余列。我可能会认为你的第一列是身份。然后它看起来像:

BEGIN
    INSERT INTO mytable(<col2>, <col3>, <col4>, <col5>, <col6>, <col7>)
        VALUES (@i,@i,'john'+@i,null,'Test','john'+@i+'@someone.com','Active');
    set @i = @i+1
END

当然,你会在哪里找到你的专栏名称。顺便说一下列出列名总是一个好主意。

答案 1 :(得分:2)

您正在尝试将值插入标识列。例如,如果您的表格如下所示:

Id        | Name    | Value
^identity

然后,除非您设置Id,否则无法在IDENTITY_INSERT列中插入值。这意味着有效的insert语句看起来像:

INSERT INTO MyTable (Name, Value) VALUES ('MyName', 'MyValue')

Id会自动生成。

答案 2 :(得分:2)

您的表定义使用增量ID作为标识(主键)。因此,您无法为此主键插入值,因为该值将自动插入。

要解决您的问题,请使用以下查询模板插入数据并排除主键,因为它将自动插入:

INSERT INTO mytable (field1, field2,...) VALUES (value1, value2...)