web-dev-qa-db-ja.com

xlsxシートをSQL Serverデータベースのテーブルに読み込むコード

Excelシートからデータを読み取ろうとしています(.xlsx file)をSQL Server 2008のテーブルに格納します。これをバッチジョブとして毎日実行し、ストアドプロシージャにSQLコードを記述して実行したいのです。

誰かが私を助けることができますか?管理者権限があります。

〜TIA

18
aaryan

これはすべきです...

SELECT *
FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0',
    'Excel 8.0;HDR=NO;Database=T:\temp\Test.xlsx',
    'select * from [sheet1$]')

しかし、私たちは、時々これがうまくいかないことを知っています。私はこれをローカル管理者だけのために機能させました。

SSISを使用してこれを行う方法もあります。

23
kiri

To、Import/Export data To/From Excel(。xls)にはMicrosoft.Jet.OLEDB.4.0が必要で、Excel 2007(.xlsx)には2007が必要Officeシステムドライバー:データ接続コンポーネント。 [〜#〜] here [〜#〜]からダウンロードできます。

Excelから新しいSQL ServerテーブルにデータをインポートしますExcel 2003(。Xls )ファイル:

select * into SQLServerTable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\testing.xls;HDR=YES', 'SELECT * FROM [Sheet1$]')

Excel 2007(。Xlsx)ファイル:

Select * into SQLServerTable FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\testing.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')

Excelから既存のSQL ServerテーブルへのデータのインポートExcel 2003(。Xls )ファイル:

Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\testing.xls;HDR=YES', 'SELECT * FROM [Sheet1$]')

Excel 2007(。Xlsx)ファイル:

INSERT INTO SQLServerTable select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\testing.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')
5
Jitendra Sawant

データベースを右クリック->タスク->データのインポート...ウィザードを実行します。

1
Dave.Gugg

GridWizardから借りる https://gridwizard.wordpress.com/2014/12/23/tsql-utility-to-read-csv-and-Excel-files/

/*
Usage:
exec sp_ReadExcelFile ‘C:\tmp’, ‘EmpData’, ‘EmpData.xls’, ‘[Sheet1$]’, ‘Col1,Col2,Col3,Col4,Col5′
*/
CREATE PROCEDURE sp_ReadExcelFile
(
@TargetFolder varchar(255), /* For example, ‘C:\tmp’ */
@TargetTable varchar(255), /* For example, ‘EmpData’ */
@ExcelFile varchar(255), /* For example, ‘EmpData.xls’ */
@ExcelSheet varchar(255), /* For example, ‘[Sheet1$]’ */
@ExcelFields varchar(8000) /* Comma separate list, for example: ‘Col1,Col2,Col3,Col4,Col5′ */
)
AS
BEGIN
declare @SqlStmt nvarchar(max)
declare @FirstColumn nvarchar(255)

set @SqlStmt = ‘IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N”[dbo].[‘ + @TargetTable + ‘]”) AND type in (N”U”))’
set @SqlStmt = @SqlStmt + ‘ DROP TABLE ‘ + @TargetTable
PRINT @SqlStmt
exec sp_executesql @SqlStmt

select top 1 @FirstColumn=[part] from fn_SplitString(@ExcelFields, ‘,’)
print ‘FirstColumn: ‘ + @FirstColumn

set @SqlStmt = ‘SELECT ‘ + @ExcelFields + ‘ INTO ‘ + @TargetTable + ‘ FROM OPENROWSET(”Microsoft.ACE.OLEDB.12.0”,
”Excel 12.0;DATABASE=’ + @TargetFolder + ‘\’ + @ExcelFile + ‘;IMEX=1”, ”Select * from ‘ + @ExcelSheet + ”’)’
+ ‘WHERE NOT ‘ + @FirstColumn + ‘ IS NULL’
PRINT @SqlStmt
exec sp_executesql @SqlStmt
END
GO

/*
Taken from: http://stackoverflow.com/questions/697519/split-function-equivalent-in-t-sql
Usage: select top 1 part from fn_SplitString(‘aaa,bbb,ccc,ddd,eee’,’,’)
*/
CREATE FUNCTION [dbo].[fn_SplitString]
(
@sString nvarchar(2048),
@cDelimiter nchar(1)
)
RETURNS @tParts TABLE ( part nvarchar(2048) )
AS
BEGIN
if @sString is null return
declare @iStart int,
@iPos int
if substring( @sString, 1, 1 ) = @cDelimiter
begin
set @iStart = 2
insert into @tParts
values( null )
end
else
set @iStart = 1
while 1=1
begin
set @iPos = charindex( @cDelimiter, @sString, @iStart )
if @iPos = 0
set @iPos = len( @sString )+1
if @iPos – @iStart > 0
insert into @tParts
values ( substring( @sString, @iStart, @iPos-@iStart ))
else
insert into @tParts
values( null )
set @iStart = @iPos+1
if @iStart > len( @sString )
break
end
RETURN
END
GO
1
Jaye

別の簡単な代替手段

コードを使用してプログラムでExcelファイルをインポートする必要がない場合は、SQL Management Studioのメニューを使用して手動で非常に迅速にインポートできます

ExcelファイルをSQL Serverにインポートする方法

0
Spyder

最も簡単な方法は、おそらくSQL Server Management StudioのImport/Export Wizardです。以下にその方法を説明する1つのサイトを示します。 http://www.mssqltips.com/ sqlservertutorial/203/simple-way-to-import-data-into-sql-server /

0
Jerrad