studio - Código para leer la hoja xlsx en una tabla en una base de datos de SQL Server
importar datos de excel a sql server management studio (6)
Estoy intentando leer datos de una hoja de Excel (archivo .xlsx
) en una tabla en SQL Server 2008. Quiero que esto se ejecute todos los días como un trabajo por lotes y, por lo tanto, quiero escribir código SQL en un procedimiento almacenado para hacerlo.
¿Alguien podría ayudarme? Tengo derechos de administrador.
~ TIA
Esto debería hacer ...
SELECT *
FROM OPENROWSET(
''Microsoft.ACE.OLEDB.12.0'',
''Excel 8.0;HDR=NO;Database=T:/temp/Test.xlsx'',
''select * from [sheet1$]'')
Pero sabemos, a veces esto simplemente no funciona. Tuve este trabajo para los administradores locales solamente.
Hay una manera de hacer esto usando SSIS también.
Haga clic derecho en la base de datos -> Tareas -> Importar datos ... Ir a través del asistente.
La forma más fácil es probablemente el Asistente de importación / exportación en SQL Server Management Studio. Aquí hay un sitio que explica cómo: http://www.mssqltips.com/sqlservertutorial/203/simple-way-to-import-data-into-sql-server/
Para, Importar / Exportar datos a / desde Excel ( .xls ) necesita Microsoft.Jet.OLEDB.4.0 y para Excel 2007 (.xlsx) necesita 2007 Office System Driver: Componentes de conectividad de datos. Puedes descargar desde HERE
Importe datos de Excel al nuevo archivo Excel 2003 ( .Xls ) de la tabla de SQL Server :
select * into SQLServerTable FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;Database=D:/testing.xls;HDR=YES'', ''SELECT * FROM [Sheet1$]'')
Archivo de 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$]'')
Importe datos de Excel al archivo de Excel 2003 ( .Xls ) de la tabla de SQL Server existente :
Insert into SQLServerTable Select * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;Database=D:/testing.xls;HDR=YES'', ''SELECT * FROM [Sheet1$]'')
Archivo de 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$]'')
Pedir prestado a 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://.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
Solo otra alternativa rapida
Si no necesita importar su archivo de Excel mediante programación usando código, puede hacerlo muy rápidamente de forma manual usando el menú en SQL Management Studio :