BULK INSERT 또는 OPENROWSET(BULK...)를 사용하여 데이터 대량 가져오기

업데이트: 2006년 7월 17일

이 항목에서는 Transact-SQL BULK INSERT 문과 INSERT...SELECT * FROM OPENROWSET(BULK...) 문을 사용하여 데이터 파일의 데이터를 Microsoft SQL Server 테이블로 대량 가져오는 방법을 간략하게 설명하며 BULK INSERT 및 OPENROWSET(BULK…)을 사용할 때와 이러한 방법을 사용하여 원격 데이터 원본에서 데이터를 대량으로 가져올 때의 보안 고려 사항을 설명합니다.

[!참고] BULK INSERT 또는 OPENROWSET(BULK…)을 사용할 경우 SQL Server 2005에서 가장을 처리하는 방법을 이해해야 합니다. 자세한 내용은 이 항목의 뒷부분에 나오는 "보안 고려 사항"을 참조하십시오.

BULK INSERT 문

BULK INSERT는 데이터 파일의 데이터를 테이블로 로드합니다. 이 기능은 bcp 명령의 in 옵션이 제공하는 기능과 유사하지만 SQL Server 프로세스에서 데이터 파일을 읽는다는 점이 다릅니다. BULK INSERT 구문에 대한 자세한 내용은 BULK INSERT(Transact-SQL)를 참조하십시오.

BULK INSERT 예를 보려면 다음을 참조하십시오.

OPENROWSET(BULK…) 함수

SQL Server 2005에서는 OPENROWSET 함수를 호출하고 BULK 옵션을 지정하여 액세스되는 OPENROWSET 대량 행 집합 공급자를 도입했습니다. OPENROWSET(BULK…) 함수를 사용하면 OLE DB 공급자를 통해 데이터 파일 등의 원격 데이터 원본에 연결하여 원격 데이터에 액세스할 수 있습니다.

데이터를 대량으로 가져오려면 INSERT 문 내의 SELECT…FROM 절에서 OPENROWSET(BULK…)를 호출합니다. 데이터 대량 가져오기의 기본 구문은 다음과 같습니다.

INSERT ... SELECT * FROM OPENROWSET(BULK...)

INSERT 문에서 사용할 경우 OPENROWSET(BULK...)에 테이블 힌트를 사용할 수 있습니다. BULK 절에는 TABLOCK과 같은 일반적인 테이블 힌트는 물론 IGNORE_CONSTRAINTS(CHECK 제약 조건만 무시), IGNORE_TRIGGERS, KEEPDEFAULTS 및 KEEPIDENTITY와 같은 특수 테이블 힌트도 사용할 수 있습니다. 자세한 내용은 테이블 힌트(Transact-SQL)를 참조하십시오.

BULK 옵션의 추가 사용법에 대한 자세한 내용은 OPENROWSET(Transact-SQL)을 참조하십시오.

INSERT...SELECT * FROM OPENROWSET(BULK...) 문의 예를 보려면 다음 항목을 참조하십시오.

보안 고려 사항

사용자가 SQL Server 로그인을 사용하는 경우 SQL Server 프로세스 계정의 보안 프로필이 사용됩니다.

반면 SQL Server 사용자가 Windows 인증을 사용하여 로그온한 경우에는 SQL Server 프로세스의 보안 프로필에 관계없이 해당 사용자 계정으로 액세스할 수 있는 파일만 읽을 수 있습니다.

예를 들어 Windows 인증을 사용하여 SQL Server 인스턴스에 로그온한 사용자가 있다고 가정합니다. 이 사용자가 BULK INSERT 또는 OPENROWSET을 사용하여 데이터 파일의 데이터를 SQL Server 테이블로 가져오려면 사용자 계정에 해당 데이터 파일에 대한 읽기 액세스 권한이 있어야 합니다. 해당 데이터 파일에 대한 액세스 권한이 있는 사용자는 SQL Server 프로세스에 해당 파일에 대한 액세스 권한이 없더라도 해당 파일의 데이터를 테이블로 가져올 수 있습니다. 이때 사용자는 SQL Server 프로세스에 파일 액세스 권한을 부여할 필요가 없습니다.

SQL Server 및 Microsoft Windows는 SQL Server 인스턴스가 인증된 Windows 사용자의 자격 증명을 전달하여 다른 SQL Server 인스턴스에 연결할 수 있도록 구성될 수 있습니다. 이러한 작업을 가장 또는 위임이라고 합니다. BULK INSERT 또는 OPENROWSET을 사용할 때 SQL Server 2005에서 사용자 가장에 대한 보안을 처리하는 방법은 반드시 이해해야 합니다. 사용자 가장을 사용하면 데이터 파일을 SQL Server 프로세스 또는 사용자와는 다른 컴퓨터에 저장할 수 있습니다. 예를 들어 Computer_A의 사용자에게 Computer_B의 데이터 파일에 대한 액세스 권한이 있고 자격 증명의 위임이 적절하게 설정되어 있는 경우 해당 사용자는 Computer_C에서 실행 중인 SQL Server 인스턴스에 연결하고 Computer_B의 데이터 파일에 액세스하여 해당 파일의 데이터를 Computer_C의 테이블로 대량 가져올 수 있습니다. 자세한 내용은 가장 개요를 참조하십시오.

[!참고] SQL Server 2005에서 파일에 대한 액세스를 제어하는 방법으로 인해 Microsoft SQL Server 2000 및 이전 버전에 있었던 보안 문제가 해결되었습니다. 이전에는 사용자가 인증을 받은 후에 SQL Server 프로세스의 보안 프로필을 기반으로 외부 파일에 액세스했습니다. 해당 파일에 대한 액세스 권한은 없지만 bulkadmin 고정 서버 역할의 구성원인 사용자에 대해 SQL Server 프로세스에 파일에 대한 읽기 권한이 있는 경우 사용자는 BULK INSERT를 사용하여 파일을 가져오고 파일 내용에 액세스할 수 있었습니다.

원격 데이터 파일에서 대량 가져오기

BULK INSERT 또는 INSERT...SELECT * FROM OPENROWSET을 사용하여 다른 컴퓨터의 데이터를 대량으로 가져오려면 두 컴퓨터 간에 데이터 파일을 공유해야 합니다. 공유 데이터 파일을 지정하려면 **\\Servername\Sharename\Path\**Filename의 일반 형식으로 해당 UNC(Universal Naming Convention) 이름을 사용합니다. SQL Server에서 사용하는 사용자 계정은 원격 디스크의 파일을 읽는 데 필요한 사용 권한이 있어야 합니다.

예를 들어 다음 BULK INSERT 문은 newdata.txt라는 데이터 파일의 데이터를 AdventureWorks 데이터베이스의 SalesOrderDetail 테이블로 대량 가져옵니다. 이 데이터 파일은 computer2 시스템의 네트워크 공유 디렉터리 salesforce에서 공유 폴더 \dailyorders에 있습니다.

BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM '\\computer2\salesforce\dailyorders\neworders.txt';
GO

[!참고] 클라이언트가 SQL Server에 독립적으로 파일을 읽기 때문에 bcp 유틸리티에는 이러한 제한 사항이 적용되지 않습니다.

참고 항목

개념

대량 데이터 가져오기 및 내보내기
대량 가져오기 및 내보내기 작업 정보
데이터 대량 가져오기에 대한 기본 지침

관련 자료

INSERT(Transact-SQL)
가장 개요
INSERT(Transact-SQL)
SELECT 절(Transact-SQL)
OPENROWSET(Transact-SQL)
SELECT(Transact-SQL)
FROM(Transact-SQL)
bcp 유틸리티
BULK INSERT(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 7월 17일

변경된 내용
  • bcp 유틸리티에 대한 내용을 새 항목인 bcp 유틸리티를 사용하여 대량 데이터 가져오기 및 내보내기로 옮겼습니다.
  • "OPENROWSET(BULK…) 함수" 섹션을 수정했습니다.
  • "보안 고려 사항" 및 "원격 데이터 파일에서 대량 가져오기" 섹션을 삽입했습니다.
  • 예가 포함되어 있는 개념 항목에 대한 "추가 예" 링크를 추가했습니다.

2005년 12월 5일

새로운 내용
  • Transact-SQL 명령을 사용하여 원격 데이터 파일에서 데이터를 가져오는 방법에 대한 설명을 추가했습니다.