Excel 파일에서 SQL Server 또는 Azure SQL Database로 데이터를 가져오는 여러 가지 방법이 있습니다. 한 단계로 Excel 파일에서 직접 데이터를 가져올 수 있는 방법도 있고, 가져오기 전에 Excel 데이터를 텍스트(CSV 파일)로 내보내야 하는 방법도 있습니다.
이 문서에서는 자주 사용하는 방법을 요약하고 자세한 정보의 링크를 제공합니다. SSIS 또는 Azure Data Factory와 같은 복잡한 도구 및 서비스에 대한 자세한 설명은 이 문서의 범위에 포함되지 않습니다. 관심 있는 솔루션에 대한 자세한 정보는 제공된 링크를 참조하세요.
분산 커리를 실행하려면 다음 예제에 나온 것과 같이 먼저 Ad Hoc Distributed Queries 서버 구성 옵션을 사용하도록 설정해야 합니다. 자세한 내용은 서버 구성: 임시 분산 쿼리를 참조하세요.
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
다음 코드 샘플은 OPENROWSET을 사용하여 Excel Sheet1 워크시트의 데이터를 새 데이터베이스 테이블로 가져옵니다.
USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENROWSET('Microsoft.JET.OLEDB.4.0',
'Excel 8.0; Database=C:\Temp\Data.xls', [Sheet1$]);
GO
다음은 OPENDATASOURCE와 같은 예제입니다.
USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
'Data Source=C:\Temp\Data.xls;Extended Properties=Excel 8.0')...[Sheet1$];
GO
가져온 데이터를 새 테이블을 만들지 않고 기존 테이블에 추가하려면 앞의 예제에서 사용된 INSERT INTO ... SELECT ... FROM ... 구문 대신에 SELECT ... INTO ... FROM ... 구문을 사용합니다.
Excel 데이터를 가져오지 않고 쿼리를 사용하려면 표준 SELECT ... FROM ... 구문을 사용하면 됩니다.
1 분산 쿼리는 SQL Server에서 계속 지원되지만 이 기능에 대한 설명서는 업데이트되지 않습니다.
연결된 서버
SQL Server에서 Excel 파일로의 영구 연결을 ‘연결된 서버’로 구성할 수도 있습니다. 다음 예제에서는 기존 Excel 연결된 서버 Data에 있는 EXCELLINK 워크시트에서 Data_ls라는 새 SQL Server 데이터베이스 테이블로 데이터를 가져옵니다.
USE ImportFromExcel;
GO
SELECT * INTO Data_ls FROM EXCELLINK...[Data$];
GO
다음 예제에 나온 것과 같이 SSMS(SQL Server Management Studio)에서 연결된 서버 또는 시스템 저장 프로시저 sp_addlinkedserver를 실행하여 연결된 서버를 만들 수 있습니다.
DECLARE @RC INT;
DECLARE @server NVARCHAR(128);
DECLARE @srvproduct NVARCHAR(128);
DECLARE @provider NVARCHAR(128);
DECLARE @datasrc NVARCHAR(4000);
DECLARE @location NVARCHAR(4000);
DECLARE @provstr NVARCHAR(4000);
DECLARE @catalog NVARCHAR(128);
-- Set parameter values
SET @server = 'EXCELLINK';
SET @srvproduct = 'Excel';
SET @provider = 'Microsoft.JET.OLEDB.4.0';
SET @datasrc = 'C:\Temp\Data.xls';
SET @provstr = 'Excel 8.0';
EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server,
@srvproduct,
@provider,
@datasrc,
@location,
@provstr,
@catalog;
BULK INSERT는 SQL Server Management Studio에서 실행할 수 있는 Transact-SQL 명령입니다. 다음 예제에서는 Data.csv 쉼표로 구분된 파일에서 기존 데이터베이스 테이블로 데이터를 로드합니다.
앞의 필수 구성 요소 섹션에서 설명한 대로 BULK INSERT를 사용하여 데이터를 가져오려면 먼저 Excel 데이터를 텍스트로 내보내야 합니다.
BULK INSERT는 직접 Excel 파일을 읽을 수 없습니다.
BULK INSERT 명령을 사용하여 로컬 또는 Azure Blob Storage에 저장된 CSV 파일을 가져올 수 있습니다.
USE ImportFromExcel;
GO
BULK INSERT Data_bi FROM 'C:\Temp\data.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
GO
SQL Server 및 Azure SQL Database에 대한 자세한 내용과 예제는 다음 문서를 참조하세요.
bcp 도구는 명령 프롬프트에서 실행됩니다. 다음 예제에서는 Data.csv 쉼표로 구분된 파일에서 기존 Data_bcp 데이터베이스 테이블로 데이터를 로드합니다.
앞의 필수 구성 요소 섹션에서 설명한 대로 bcp를 사용하여 데이터를 가져오려면 먼저 Excel 데이터를 텍스트로 내보내야 합니다.
bcp 도구구는 직접 Excel 파일을 읽을 수 없습니다. 로컬 스토리지에 저장된 테스트(CSV) 파일에서 SQL Server 또는 SQL Database로 가져오는 데 사용합니다.