una tabla studio query para management into insertar importar from existente datos data sql-server tsql xlsx

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.



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 :

¿Cómo importar un archivo de Excel en SQL Server?