Warning: preg_match(): Unknown modifier 'b' in /mnt/datadisk/www/src/Controllers/PostController.php on line 206 SQL Server - Importando y Exportando Datos de Hojas de Cálculo de Excel — Dirceu ResendeSaltar al contenido
En esta publicación, voy a hablar sobre una característica muy interesante de SQL Server que funciona como un diferenciador importante para la base de datos, que es la capacidad de integrarse de forma nativa con Excel, permitiéndole consultar y manipular hojas de cálculo a través de la base de datos, sin necesidad de ningún otro recurso externo.
Hoja de cálculo de ejemplo que se utilizará en esta publicación: SQL Server: cómo importar datos de una hoja de datos de Excel a una base de datos - Ejemplo 1
SQL Server: cómo importar datos de una hoja de datos de Excel a una base de datos - Ejemplo 2
Importar datos de Excel al Banco
Cómo importar una hoja de cálculo de Excel a SQL Server
Sin duda, la forma más utilizada es leer datos de una hoja de cálculo de Excel en la base de datos de SQL Server. Para ello usaremos OPENROWSET y el controlador ACE OLEDB 12.0, ya que mi sistema operativo y mi banco están en la versión de 64 bits y usando una hoja de cálculo de Office 2016 (El complemento JET admite hasta la versión 2003).
El comando básico para leer es el siguiente:
SELECT *
FROM OPENROWSET (
'Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Teste.xlsx;',
'SELECT * FROM [Aba1$]'
)
Ejemplo: SQL Server - Cómo importar datos de una hoja de datos de Excel a una base de datos - Importar
Otra forma, que facilita mucho esta integración, es crear un Procedimiento Almacenado para facilitar el uso de los datos:
CREATE PROCEDURE [dbo].[stpImporta_Excel](
@Caminho VARCHAR(5000),
@Aba VARCHAR(200),
@Colunas VARCHAR(5000)
)
AS
BEGIN
DECLARE @Exec VARCHAR(MAX)
SET @Exec = 'SELECT * from OPENROWSET (''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database='
+ @Caminho
+ ';'', ''SELECT '
+ @Colunas
+ ' FROM ['
+ @Aba
+ '$]'') A'
EXEC(@Exec)
END
Y luego puedes usarlo así: SQL Server - Cómo importar datos de una hoja de datos de Excel a una base de datos - Import2
También puede devolver solo columnas específicas: SQL Server: cómo importar una hoja de cálculo de Excel a una base de datos4
O importe el resultado a una tabla de base de datos: SQL Server - Cómo importar datos de una hoja de datos de Excel a una base de datos - Import3
Exportar datos de base de datos a Excel
Cómo insertar/exportar datos de SQL Server a Excel
De una forma muy sencilla también es posible insertar datos de nuestra base de datos en una hoja de cálculo de Excel. La sintaxis básica es la siguiente:
INSERT INTO
OPENROWSET (
'Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Teste.xlsx;',
'SELECT * FROM [Aba1$]'
)
SELECT 'Paulo', 32, 2584.44
Ejemplo de inserción: SQL Server: cómo insertar datos de exportación desde una base de datos a una hoja de cálculo de Excel
Ejemplo de consulta que demuestra que el registro fue insertado: SQL Server: cómo insertar datos de exportación desde una base de datos a una hoja de cálculo de Excel2
Insertando desde una tabla: SQL Server: cómo insertar datos de exportación desde una base de datos a una hoja de cálculo de Excel3
Una vez más, podemos utilizar un Procedimiento Almacenado para facilitar las operaciones del día a día:
CREATE PROCEDURE [dbo].[stpInsere_em_Excel](
@Caminho VARCHAR(MAX),
@Aba varchar(200),
@Tabela varchar(200),
@Colunas varchar(MAX)
)
AS
BEGIN
IF (@Colunas = '*')
BEGIN
SELECT
@Colunas = isnull(nullif(@Colunas,'*') + ',','') + b.name
FROM
sysobjects a WITH(NOLOCK)
JOIN syscolumns b WITH(NOLOCK) ON a.id = b.id
WHERE
a.xtype = 'U'
AND a.name = @Tabela
END
DECLARE @Exec VARCHAR(MAX)
SET @Exec = 'INSERT INTO OPENROWSET (''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database='
+ @Caminho
+ ';'', ''SELECT '
+ @Colunas
+ ' FROM ['
+ @Aba
+ '$]'') '
+ 'SELECT '
+ @Colunas
+ ' FROM '
+ @Tabela
EXEC(@Exec)
END
Ejemplo de uso del procedimiento: SQL Server: cómo insertar datos de exportación desde una base de datos a una hoja de cálculo de Excel4
Actualización de datos de Excel a través del banco.
Cómo actualizar datos de una hoja de cálculo de Excel usando SQL Server
Al igual que otras operaciones, también es posible actualizar datos de una hoja de cálculo de Excel a través de SQL Server. La sintaxis básica es esta:
UPDATE A
SET A.Nome = 'Teste 1'
FROM OPENROWSET (
'Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Teste.xlsx;',
'SELECT * FROM [Aba1$]'
) A
WHERE A.Nome = 'Paulo'
Ejemplo: SQL Server: cómo actualizar datos en una hoja de cálculo de Excel desde la base de datos
Ejemplo con JOIN usando tablas de bases de datos locales: SQL Server: cómo actualizar datos en una hoja de cálculo de Excel desde la base de datos2
Procedimiento almacenado para facilitar la vida cotidiana:
CREATE PROCEDURE [dbo].[stpAtualiza_em_Excel](
@Caminho varchar(max),
@Aba varchar(200),
@Tabela varchar(200),
@Colunas_Join varchar(max),
@Colunas_Update varchar(max)
)
AS
BEGIN
DECLARE
@join VARCHAR(MAX) ,
@update VARCHAR(MAX);
SELECT
@join = ISNULL(@join + ' and ', '') + 'a.' + LTRIM(RTRIM(s)) + ' = b.' + LTRIM(RTRIM(s))
FROM
dbo.fncQuebra_Texto(@Colunas_Join, ',') AS a;
SELECT
@update = ISNULL(@update + ',', '') + 'a.' + LTRIM(RTRIM(s)) + ' = b.' + LTRIM(RTRIM(s))
FROM
dbo.fncQuebra_Texto(@Colunas_Update, ',') AS a;
DECLARE @Exec VARCHAR(MAX)
SET @Exec = 'UPDATE A '
+ 'SET '
+ @update
+ ' FROM OPENROWSET (''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database='
+ @Caminho
+ ';'', ''Select * From ['
+ @Aba
+ '$]'') A'
+ ' JOIN '
+ @Tabela
+ ' b'
+ ' ON '
+ @join
EXEC(@Exec)
END
Función fncQuebra_Texto requerida para usar SP:
CREATE FUNCTION [dbo].[fncQuebra_Texto] (
@str NVARCHAR(4000) ,
@separator CHAR(1)
)
RETURNS TABLE
AS
RETURN
(
WITH tokens ( p, a, b )
AS (
SELECT 1, 1, CHARINDEX(@separator, @str)
UNION ALL
SELECT p + 1, b + 1, CHARINDEX(@separator, @str, b + 1)
FROM tokens
WHERE b > 0
)
SELECT
p - 1 zeroBasedOccurance ,
SUBSTRING(@str, a, CASE WHEN b > 0 THEN b - a ELSE 4000 END) AS s
FROM
tokens
);
Uso de SP: SQL Server: cómo actualizar datos en una hoja de cálculo de Excel desde la base de datos3
Desafortunadamente, no es posible eliminar datos de hojas de cálculo de Excel a través de SQL Server. Si lo intentas, encontrarás este mensaje de error:
El proveedor OLE DB “Microsoft.ACE.OLEDB.12.0” para el servidor vinculado “(nulo)” devolvió el mensaje “Este ISAM no admite la eliminación de datos en una tabla vinculada”.
Mensaje 7345, Nivel 16, Estado 1, Línea 1
¡Eso es todo, amigos!
Un abrazo y gracias por visitarnos.
servidor sql importar leer exportar actualizar datos desde una hoja de cálculo de excel al banco importar leer exportar hoja de cálculo de datos hoja de datos
servidor sql importar leer exportar actualizar datos desde una hoja de cálculo de excel al banco importar leer exportar hoja de cálculo de datos hoja de datos
Dirceu Resende
Arquitecto de Bases de Datos y BI · Microsoft MVP · MCSE, MCSA, MCT, MTA, MCP.
Comentários (0)
Carregando comentários…