2011-11-13 6 views
2

두 데이터베이스에 두 개의 유사한 테이블이 있습니다. DB1의 Person_Table1 및 DB2의 Person_Table2. DB2의 Person_Table1에서 DB2의 Person_Table2까지 대량 삽입이 필요합니다.SQL에서 대량 삽입 방법

두 테이블의 열 이름은 서로 비슷합니다. 두 테이블의 열 개수가 같고 열 개수가 많습니다. 내가 어떻게 fallowing 쿼리 같은 대량 삽입 할 수 있습니다 : 난 항상 명시 적으로 열 이름을 사용

insert into DB2.dbo.Person_Table2 (*) (SELECT * FROM DB1.dbo.Person_Table1) 
+1

가까이,하지만 당신은 선택뿐만 아니라에 삽입의 열 목록을 지정해야합니다. IE \t 성 \t을 선택 DB2.dbo.Person_Table2 ( \t 성 \t, 이름 \t, 가운데 이름 )에 삽입, DB1.dbo.Person_Table1 –

+0

@Hiawatha 경운기 I FROM FIRSTNAME \t, 가운데 이름 그것을 알고 있지만 내 열 개수가 많고 Select에서 사용하고 싶습니다. 또한 많은 테이블에서이 작업을 수행합니다. – Ehsan

+2

테이블 정의가 일치하지 않을 가능성이 크고 나쁜 습관이 있기 때문에 *를 사용할 수 없습니다. 하나의 데이터베이스에서 신원 값 또는 외부 키 제한을 다른 데이터베이스와 일치시키지 않는 등의 다양한 문제가있을 수 있습니다. 열 이름을 나열하면 올바른 접근 방식입니다. –

답변

1

을 - 같은 INSERT 할 때 단지 매우 명확하고 안전을 위해 :

INSERT INTO DB2.dbo.Person_Table2(Col1, Col2, ...., ColN) 
    SELECT Col1, Col2, ...., ColN 
    FROM DB1.dbo.Person_Table1 

그 방법을, 당신은 또한 예를 들어 목표 테이블의 한 컬럼을 예를 들어. 당신은 어떤 상수 값 또는 (GETDATE()이나 뭐 같은)는 SQL 함수의 값

INSERT INTO DB2.dbo.Person_Table2(Col1, Col2, ...., ColN, ModifyDate) 
    SELECT Col1, Col2, ...., ColN, GETDATE() 
    FROM DB1.dbo.Person_Table1 
+0

알지만 칼럼 개수는 많고'Select * '에서 사용하기를 원한다. 많은 테이블에서이 작업을 수행한다. – Ehsan

+0

@ehsanzeynali : 에러가 발생하기 쉽고 항상 중단되기 때문에 * 사용하지 않을 것이다. 테이블 구조 중 하나가 어떤 이유로 든 변경됩니다 ... 예, 약간의 타이핑이 필요하지만, 그 여분의 노력은 가치가 있습니다! –

+0

이 작업에 대한 해결책이 없다는 뜻입니까? – Ehsan