-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 テーブル 'mytable' の ID 列の明示的な値は、列リストが使用され、IDENTITY_INSERT が ON の場合にのみ指定できます。

4

3 に答える 3

4

テーブルには ID 列があります。挿入ステートメントで残りの列を明示的に指定する必要があります。最初の列は ID だと思います。次に、次のようになります。

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 列に値を挿入しようとしています。たとえば、テーブルが次のようになっているとします。

Id        | Name    | Value
^identity

Idを設定しない限り、列に値を挿入することはできませんIDENTITY_INSERT。これは、有効な挿入ステートメントが次のようになることを意味します。

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

Id自動的に生成されます。

于 2012-10-23T18:28:39.967 に答える
2

テーブル定義は、増分 ID を ID (主キー) として使用しています。値は自動的に挿入されるため、この主キーの値を挿入することはできません。

問題を解決するには、次のクエリ テンプレートを使用してデータを挿入し、自動的に挿入される主キーを除外します。

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