BULK INSERT 또는 OPENROWSET(BULK...)를 사용하여 데이터 대량 가져오기Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server)

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 항목에서는 Transact-SQLTransact-SQL BULK INSERT 문 및 INSERT...SELECT * FROM OPENROWSET(BULK...) 문을 사용하여 데이터 파일의 데이터를 SQL ServerSQL Server 테이블에 대량으로 가져오는 방법을 간략하게 설명합니다.This topic provides an overview of how to use the Transact-SQLTransact-SQL BULK INSERT statement and the INSERT...SELECT * FROM OPENROWSET(BULK...) statement to bulk import data from a data file into a SQL ServerSQL Server table. 또한 BULK INSERT 및 OPENROWSET(BULK…)을 사용할 때와 이러한 방법을 사용하여 원격 데이터 원본에서 데이터를 대량으로 가져올 때의 보안 고려 사항에 대해서도 설명합니다.This topic also describes security considerations for using BULK INSERT and OPENROWSET(BULK…), and using these methods to bulk import from a remote data source.

참고

BULK INSERT 또는 OPENROWSET(BULK…)을 사용할 경우 SQL ServerSQL Server 버전에서 가장을 처리하는 방법을 이해해야 합니다.When you use BULK INSERT or OPENROWSET(BULK…), it is important to understand how SQL ServerSQL Server version handles impersonation. 자세한 내용은 이 항목의 뒷부분에 나오는 "보안 고려 사항"을 참조하십시오.For more information, see "Security Considerations," later in this topic.

BULK INSERT 문BULK INSERT statement

BULK INSERT는 데이터 파일의 데이터를 테이블로 로드합니다.BULK INSERT loads data from a data file into a table. 이 기능은 bcp 명령의 in 옵션이 제공하는 기능과 유사하지만 SQL ServerSQL Server 프로세스에서 데이터 파일을 읽는다는 점이 다릅니다.This functionality is similar to that provided by the in option of the bcp command; however, the data file is read by the SQL ServerSQL Server process. BULK INSERT 구문에 대한 자세한 내용은 BULK INSERT(Transact-SQL)를 참조하세요.For a description of the BULK INSERT syntax, see BULK INSERT (Transact-SQL).

BULK INSERT 예BULK INSERT examples

OPENROWSET(BULK…) 함수OPENROWSET(BULK…) Function

OPENROWSET 대량 행 집합 공급자는 OPENROWSET 함수를 호출하고 BULK 옵션을 지정하여 액세스합니다.The OPENROWSET bulk rowset provider is accessed by calling the OPENROWSET function and specifying the BULK option. OPENROWSET(BULK…) 함수를 사용하면 OLE DB 공급자를 통해 데이터 파일 등의 원격 데이터 원본에 연결하여 원격 데이터에 액세스할 수 있습니다.The OPENROWSET(BULK…) function allows you to access remote data by connecting to a remote data source, such as a data file, through an OLE DB provider.

적용 대상: OPENROWSETSQL 데이터베이스SQL Database에서 사용할 수 없습니다.Applies to: OPENROWSET is not available in SQL 데이터베이스SQL Database.

데이터를 대량으로 가져오려면 INSERT 문 내의 SELECT…FROM 절에서 OPENROWSET(BULK…)를 호출합니다.To bulk import data, call OPENROWSET(BULK…) from a SELECT…FROM clause within an INSERT statement. 데이터 대량 가져오기의 기본 구문은 다음과 같습니다.The basic syntax for bulk importing data is:

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

INSERT 문에서 사용하는 경우 OPENROWSET(BULK...)은 테이블 힌트를 지원합니다.When used in an INSERT statement, OPENROWSET(BULK...) supports table hints. 또한 TABLOCK과 같은 일반적인 테이블 힌트 외에도 BULK 절에는 IGNORE_CONSTRAINTS(CHECK 제약 조건만 무시), IGNORE_TRIGGERS, KEEPDEFAULTS 및 KEEPIDENTITY와 같은 특수 테이블 힌트도 사용할 수 있습니다.In addition to the regular table hints, such as TABLOCK, the BULK clause can accept the following specialized table hints: IGNORE_CONSTRAINTS (ignores only the CHECK constraints), IGNORE_TRIGGERS, KEEPDEFAULTS, and KEEPIDENTITY. 자세한 내용은 테이블 힌트(Transact-SQL)를 참조하세요.For more information, see Table Hints (Transact-SQL).

BULK 옵션의 추가 사용법에 대한 자세한 내용은 OPENROWSET(Transact-SQL)를 참조하세요.For information about additional uses of the BULK option, see OPENROWSET (Transact-SQL).

INSERT...SELECT * FROM OPENROWSET(BULK...) 문 - 예제:INSERT...SELECT * FROM OPENROWSET(BULK...) statements - examples:

보안 고려 사항Security considerations

사용자가 SQL ServerSQL Server 로그인을 사용하는 경우 SQL ServerSQL Server 프로세스 계정의 보안 프로필이 사용됩니다.If a user uses a SQL ServerSQL Server login, the security profile of the SQL ServerSQL Server process account is used. SQL Server 인증을 사용하는 로그인은 데이터베이스 엔진 외부에서 인증될 수 없습니다.A login using SQL Server authentication cannot be authenticated outside of the Database Engine. 따라서 BULK INSERT 명령이 SQL Server 인증을 사용하는 로그인에 의해 시작되면 데이터에 대한 연결이 SQL Server 프로세스 계정(SQL Server 데이터베이스 엔진 서비스에서 사용하는 계정)의 보안 컨텍스트를 사용하여 설정됩니다.Therefore, when a BULK INSERT command is initiated by a login using SQL Server authentication, the connection to the data is made using the security context of the SQL Server process account (the account used by the SQL Server Database Engine service).

원본 데이터를 성공적으로 읽으려면 SQL Server 데이터베이스 엔진에서 사용하는 계정에 원본 데이터에 대한 액세스 권한을 부여해야 합니다.To successfully read the source data you must grant the account used by the SQL Server Database Engine, access to the source data. 반면 SQL ServerSQL Server 사용자가 Windows 인증을 사용하여 로그온한 경우에는 SQL ServerSQL Server 프로세스의 보안 프로필에 관계없이 해당 사용자 계정으로 액세스할 수 있는 파일만 읽을 수 있습니다.In contrast, if a SQL ServerSQL Server user logs on by using Windows Authentication, the user can read only those files that can be accessed by the user account, regardless of the security profile of the SQL ServerSQL Server process.

예를 들어 Windows 인증을 사용하여 SQL ServerSQL Server 인스턴스에 로그온한 사용자가 있다고 가정합니다.For example, consider a user who logged in to an instance of SQL ServerSQL Server by using Windows Authentication. 이 사용자가 BULK INSERT 또는 OPENROWSET을 사용하여 데이터 파일의 데이터를 SQL ServerSQL Server 테이블로 가져오려면 사용자 계정에 해당 데이터 파일에 대한 읽기 액세스 권한이 있어야 합니다.For the user to be able to use BULK INSERT or OPENROWSET to import data from a data file into a SQL ServerSQL Server table, the user account requires read access to the data file. 해당 데이터 파일에 대한 액세스 권한이 있는 사용자는 SQL ServerSQL Server 프로세스에 해당 파일에 대한 액세스 권한이 없더라도 해당 파일의 데이터를 테이블로 가져올 수 있습니다.With access to the data file, the user can import data from the file into a table even if the SQL ServerSQL Server process does not have permission to access the file. 이때 사용자는 SQL ServerSQL Server 프로세스에 파일 액세스 권한을 부여할 필요가 없습니다.The user does not have to grant file-access permission to the SQL ServerSQL Server process.

SQL ServerSQL ServerMicrosoftMicrosoft Windows는 SQL ServerSQL Server 인스턴스가 인증된 Windows 사용자의 자격 증명을 전달하여 다른 SQL ServerSQL Server 인스턴스에 연결할 수 있도록 구성될 수 있습니다. and MicrosoftMicrosoft Windows can be configured to enable an instance of SQL ServerSQL Server to connect to another instance of SQL ServerSQL Server by forwarding the credentials of an authenticated Windows user. 이러한 작업을 가장 또는 위임이라고 합니다.This arrangement is known as impersonation or delegation. BULK INSERT 또는 OPENROWSET을 사용할 경우 SQL ServerSQL Server 버전에서 사용자 가장에 대한 보안을 처리하는 방법을 이해해야 합니다.Understanding how SQL ServerSQL Server version handle security for user impersonation is important when you use BULK INSERT or OPENROWSET. 사용자 가장을 사용하면 데이터 파일을 SQL ServerSQL Server 프로세스 또는 사용자와는 다른 컴퓨터에 저장할 수 있습니다.User impersonation allows the data file to reside on a different computer than either the SQL ServerSQL Server process or the user. 예를 들어 Computer_A 의 사용자에게 Computer_B의 데이터 파일에 대한 액세스 권한이 있고 자격 증명의 위임이 적절하게 설정되어 있는 경우 해당 사용자는 SQL ServerSQL Server Computer_C 에서 실행 중인인스턴스에 연결하고 Computer_B의 데이터 파일에 액세스하여 해당 파일의 데이터를 Computer_C의 테이블로 대량 가져올 수 있습니다.For example, if a user on Computer_A has access to a data file on Computer_B, and the delegation of credentials has been set appropriately, the user can connect to an instance of SQL ServerSQL Server that is running on Computer_C, access the data file on Computer_B, and bulk import data from that file into a table on Computer_C.

원격 데이터 파일에서 대량 가져오기Bulk importing from a remote data file

BULK INSERT 또는 INSERT...SELECT * FROM OPENROWSET(BULK...)를 사용하여 다른 컴퓨터에서 데이터를 대량으로 가져오려면 두 컴퓨터 간에 데이터 파일을 공유해야 합니다.To use BULK INSERT or INSERT...SELECT * FROM OPENROWSET(BULK...) to bulk import data from another computer, the data file must be shared between the two computers. 공유 데이터 파일을 지정하려면 \\Servername\Sharename\Path\Filename의 일반 형식으로 해당 UNC(범용 명명 규칙) 이름을 사용합니다.To specify a shared data file, use its universal naming convention (UNC) name, which takes the general form, \\Servername\Sharename\Path\Filename. 또한 데이터 파일을 액세스하는 데 사용되는 계정에는 원격 디스크의 파일을 읽는 데 필요한 사용 권한이 있어야 합니다.Additionally, the account used to access the data file must have the permissions that are required for reading the file on the remote disk.

예를 들어 다음 BULK INSERT 문은 SalesOrderDetail 라는 데이터 파일의 데이터를 AdventureWorks 데이터베이스의 newdata.txt테이블로 대량 가져옵니다.For example, the following BULK INSERT statement bulk imports data into the SalesOrderDetail table of the AdventureWorks database from a data file that is named newdata.txt. 이 데이터 파일은 \dailyorders 시스템의 네트워크 공유 디렉터리 salesforce에서 공유 폴더 computer2에 있습니다.This data file resides in a shared folder named \dailyorders on a network share directory named salesforce on a system named computer2.

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

참고

클라이언트는 SQL ServerSQL Server와 독립적으로 파일을 읽기 때문에 bcp 유틸리티에는 이러한 제한 사항이 적용되지 않습니다.This restriction does not apply to the bcp utility because the client reads the file independently of SQL ServerSQL Server.

참고 항목See also

INSERT(Transact-SQL) INSERT (Transact-SQL)
SELECT 절(Transact-SQL) SELECT Clause (Transact-SQL)
데이터 대량 가져오기 및 내보내기(SQL Server) Bulk Import and Export of Data (SQL Server)
OPENROWSET(Transact-SQL) OPENROWSET (Transact-SQL)
SELECT(Transact-SQL) SELECT (Transact-SQL)
FROM(Transact-SQL) FROM (Transact-SQL)
bcp 유틸리티 bcp Utility
BULK INSERT(Transact-SQL)BULK INSERT (Transact-SQL)