-2

嗨,我正在尝试使用此命令将 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

但我收到了这个错误。

消息 8101,级别 16,状态 1,第 8 行 只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“mytable”中的标识列指定显式值。

4

3 回答 3

4

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

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

当然,您的列名在哪里。顺便说一下,列出列名总是一个好主意。

于 2012-10-23T18:27:26.437 回答
2

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

Id        | Name    | Value
^identity

然后你不能在Id列中插入一个值,除非你设置IDENTITY_INSERT. 这意味着有效的插入语句如下所示:

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

Id自动生成。

于 2012-10-23T18:28:39.967 回答
2

您的表定义使用增量 ID 作为身份(主键)。所以你不能为这个主键插入值,因为值会自动插入。

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

INSERT INTO mytable (field1, field2,...) VALUES (value1, value2...)
于 2012-10-23T18:28:44.607 回答