J'essaie de lire les données d'une feuille Excel (fichier .xlsx
) dans une table de SQL Server 2008. Je souhaite que cela soit exécuté quotidiennement en tant que travail par lots et, par conséquent, je souhaite écrire du code SQL dans une procédure stockée.
Quelqu'un pourrait-il m'aider? J'ai des droits d'administrateur.
~ TIA
Cela devrait faire ...
SELECT *
FROM OPENROWSET(
'Microsoft.ACE.OLEDB.12.0',
'Excel 8.0;HDR=NO;Database=T:\temp\Test.xlsx',
'select * from [sheet1$]')
Mais nous sommes conscients que, parfois, cela ne fonctionne tout simplement pas. J'avais ce travail pour les administrateurs locaux seulement.
Il existe un moyen de faire cela en utilisant également SSIS.
Pour importer/exporter des données vers/depuis Excel (.xls), vous devez disposer de Microsoft.Jet.OLEDB.4.0 et, pour Excel 2007 (.xlsx), du pilote Office System 2007: composants de connectivité de données. Vous pouvez télécharger de ICI
Importer des données de Excel vers un nouveau fichier de table 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$]')
Fichier 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$]')
Importer des données de Excel vers un fichier de table SQL Server Excel 2003 (.Xls) existant:
Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\testing.xls;HDR=YES', 'SELECT * FROM [Sheet1$]')
Fichier 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$]')
Faites un clic droit sur la base de données -> Tâches -> Importer des données ... Passez par l'assistant.
Emprunter à 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
Juste une autre alternative rapide
Si vous n'avez pas besoin d'importer votre fichier Excel par programme à l'aide de code, vous pouvez le faire très rapidement manuellement à l'aide du menu de SQL Management Studio.:
La méthode la plus simple consiste probablement à importer/exporter Wizard dans SQL Server Management Studio. Voici un site qui explique comment: http://www.mssqltips.com/sqlservertutorial/203/simple-way-to-import-data-into-sql-server/