2012-10-23 3 views
-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'[email protected],null,'Test','john'[email protected]+'@someone.com','Active'); 
     set @i = @i+1 
    END 

하지만이 오류가 발생합니다.

메시지 8101, 수준 16, 상태 1, 줄 8 테이블의 ID 열에 대한 명시 적 값 'MYTABLE'열 목록이 사용되고 IDENTITY_INSERT가 ON 인 경우에만 지정할 수 있습니다.

+0

테이블 DDL을 게시하시기 바랍니다. – Taryn

+0

열 목록 지정 ...? – Kermit

+1

[테이블의 ID 열에 대한 명시 적 값을 어떻게 해결할 수 있습니까?] (http://stackoverflow.com/questions/3069420/how-can-i-solve-an-explicit-value-for -the-identity-column-in-table) – Pondlife

답변

4

테이블에 ID 열이 있습니다. insert 문에서 나머지 열을 명시 적으로 나타내야합니다. 첫 번째 열은 ID라고 가정합니다. 그러면 다음과 같이 보일 것입니다 :

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

물론, 당신은 당신의 컬럼 이름을 가질 것입니다. 컬럼 이름을 나열하는 것은 항상 좋은 생각입니다.

2

ID 열에 값을 삽입하려고합니다. 예를 들어 테이블은 다음과 같다 경우 : 당신이 IDENTITY_INSERT을 설정하지 않는 한

Id  | Name | Value 
^identity 

그런 다음 당신이 Id 컬럼에 값을 삽입 할 수 없습니다. 이것은 유효한 삽입 문처럼 보일 것이다 것을 의미 :

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

Id가 자동으로 생성 될 것이다.

+0

명령문의 삽입 부분에서 열 정의를 생략하는 것은 SQL 반 패턴입니다. – HLGEM

+0

좋은 지적. 업데이트 됨. –

2

테이블 정의에서 증분 ID를 ID (기본 키)로 사용하고 있습니다. 값이 자동으로 삽입되므로이 기본 키의 값을 삽입 할 수 없습니다.

, 당신의 문제를 해결 데이터를 삽입하는 쿼리 템플릿 울부 짖는 소리를 사용하고 자동으로 삽입되는 바와 같이, 기본 키를 제외하려면 다음

INSERT INTO mytable (field1, field2,...) VALUES (value1, value2...) 
관련 문제