2010. 8. 6. 19:37
행을 복사하기 위해서는
Select 와 Insert 문을 합쳐서 사용하면 된다.
예를 들어
insert into CROPS (Crop_Number ,Crop_Name, Mem_Num)
(select Crop_Number,Crop_Name, Mem_Num from CROPS where @CROP_NUMBER = Number)
(select Crop_Number,Crop_Name, Mem_Num from CROPS where @CROP_NUMBER = Number)
이렇게 하면 되는데 서브쿼리로 들어가있는 Select에 보면 where 절이 있는데 이건 where 조건에 해당하는 행을 복사 하겠다는 것이다. 위와 같이 기본키만 다른 똑같은 행을 만들 수도있고 특정 값만 변경시켜서 넣고 싶을때는
insert into CROPS (Crop_Number ,Crop_Name, Mem_Num)
(select Crop_Number,@NEW_CROP_NAME, @MEM_NUM from CROPS where @CROP_NUMBER = Number)
이와 같이 @스칼라 변수에 어떠한 값을 넣은 후에 특정 열만 복사하는 방법도 있다.(select Crop_Number,@NEW_CROP_NAME, @MEM_NUM from CROPS where @CROP_NUMBER = Number)
그리고...
Insert into 에서 특정 열을 지정해주지 않으면 이런 오류가 날 수 있다.
아래 글은 http://dualist.tistory.com/159 여기서 퍼왔다.
테이블 A에 있는 ID열의 명시적 값은 열 목록이 상요되고 IDENTITY_INSERT 가 ON일 때만 지정할 수 있습니다.
이 메세지가 나오는 이유는 추측이지만 이런것 같다.
INSERT ... SELECT 사용 시 TABLE 명 뒤에 컬럼 정의를 안하면 발생하는 에러로 보인다.
따라서 INSERT ... SELECT 사용 시에는 반드시 컬럼명을 명시해줘야만 에러가 발생하지 않는다.
그리고 INSERT ... SELECT 하기 전에
SET IDENTITY_INSERT 테이블명 ON 또는 SET IDENTITY_INSERT 테이블명 OFF 를
적절히 사용해줘야만 문제 없이 입력될 것이다.
SET IDENTITY_INSERT 테이블명 ON 은 인덱스를 수동으로 입력 가능하게 하는 명령이고,
SET IDENTITY_INSERT 테이블명 OFF 은 인덱스를 자동으로 입력 가능하게 하는 명령이다.
'.NET > ADO.NET' 카테고리의 다른 글
내장 프로시저 (0) | 2010.08.04 |
---|---|
회원탈퇴시 모든정보 날리기 (0) | 2010.07.26 |
다른컴퓨터로 DB 복사 (0) | 2010.07.12 |
내장 프로시저(사용법) (0) | 2010.07.10 |
DB에 이미지 저장 / 로드 하기 (0) | 2010.06.18 |