Acceso a archivos almacenados en Azure
Fecha: 28-09-2025
Hora inicio: 9:00 PM
Hora fin: 11:45 PM
Introducción
En esta bitácora detallo todo el proceso que realicé para subir un archivo XML a Azure Blob Storage y cargarlo en Azure SQL Database usando T-SQL.
Cabe aclarar que la carga de datos ni inserción a la tabla no se realizó mediante un procedimiento almacenado ya que dicha actividad fue una prueba, espero dar una versión de SP en el siguiente post.
Paso 1: Crear cuenta de Azure Storage y contenedor
Accedí al portal de Azure.
Accedí y creé una Storage Account.


Dentro de la cuenta, creé un contenedor llamado xmlfiles.
- Lo dejé Private (sin acceso anónimo) para seguridad.

- Subí el archivo Clientes.xml al contenedor.
Contenido del xml:
<Clientes>
<Cliente>
<Id>1</Id>
<Nombre>Juan</Nombre>
<Edad>30</Edad>
</Cliente>
<Cliente>
<Id>2</Id>
<Nombre>Ana</Nombre>
<Edad>25</Edad>
</Cliente>
</Clientes>
Generé un SAS Token para permitir que SQL Server acceda al contenedor.
Este token tiene permisos de lectura y listado, pero puede tener todos los permisos.

Nota: No activé acceso anónimo ya que todo el acceso se controla mediante el SAS Token.
Paso 2: Configuración en Azure SQL Database (SSMS)
Para que SQL Server pueda leer el archivo XML desde Blob Storage, configuré:
Master Key
- Cifra las credenciales dentro de la base de datos.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'algunacontraseñafuerte';
Database Scoped Credential
- Contiene la SAS Token que permite acceder al Blob Storage.
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=2024-09-01&ss=b&srt=sco&sp=rl&se=2025-01-01T23:59:59Z&spr=https&sig=AbC123XYZ';
External Data Source
- Define la ruta del contenedor.
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://<tu_storage>.blob.core.windows.net/xmlfiles',
CREDENTIAL = MyAzureBlobCredential
);
Paso 3: Crear tabla de destino
En SQL Server, creé la tabla que almacenará los datos del XML:
CREATE TABLE Clientes (
Id INT PRIMARY KEY,
Nombre NVARCHAR(100),
Edad INT
);
Paso 4: Leer el XML y cargar la tabla
Declaré una variable
@xmlde tipo XML.Usé OPENROWSET con BULK para leer el archivo completo desde el contenedor.
Parseé los nodos <Cliente> y los inserté en la tabla.
-- variable
DECLARE @xml XML;
-- se carga el XML desde Blob Storage
SELECT @xml = BulkColumn
FROM OPENROWSET(
BULK 'nombredelarchivo.xml',
DATA_SOURCE = 'MyAzureBlobStorage',
SINGLE_BLOB
) AS x;
-- se insertan datos en la tabla
INSERT INTO Clientes (Id, Nombre, Edad)
SELECT
C.value('(Id/text())[1]', 'INT') AS Id,
C.value('(Nombre/text())[1]', 'NVARCHAR(100)') AS Nombre,
C.value('(Edad/text())[1]', 'INT') AS Edad
FROM @xml.nodes('/Clientes/Cliente') AS T(C);
Explicación
OPENROWSET: permite leer datos de un origen externo como si fuera una tabla.
BULK: lee todo el archivo como un solo bloque (
SINGLE_BLOB).@xml.nodes(‘/Clientes/Cliente‘): recorre cada nodo
<Cliente>dentro del XML.C.value(…): extrae los valores de cada campo.
Referencias
- Importar datos en bloque usando BULK INSERT o OPENROWSET(BULK…): https://learn.microsoft.com/en-us/sql/relational-databases/import-export/import-bulk-data-by-using-bulk-insert-or-openrowset-bulk-sql-server?view=sql-server-ver17
- Crear credenciales de base de datos (Database Scoped Credential): https://learn.microsoft.com/en-us/sql/t-sql/statements/create-database-scoped-credential-transact-sql?view=sql-server-ver17
- Crear fuente de datos externa (External Data Source): https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql?view=sql-server-ver17
- OPENROWSET BULK (Transact-SQL): https://learn.microsoft.com/en-us/sql/t-sql/functions/openrowset-bulk-transact-sql?view=sql-server-ver17
- Ejemplos de importación masiva de documentos XML en SQL Server: https://learn.microsoft.com/en-us/sql/relational-databases/import-export/examples-of-bulk-import-and-export-of-xml-documents-sql-server?view=sql-server-ver17
- Crear SAS tokens para contenedores de almacenamiento: https://learn.microsoft.com/en-us/azure/ai-services/translator/document-translation/how-to-guides/create-sas-tokens
- Tutorial: Uso de Azure Blob Storage con SQL Server: https://learn.microsoft.com/en-us/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server?view=sql-server-ver17
- Acceso a Blob Storage desde Azure SQL Server utilizando una identidad administrada: https://learn.microsoft.com/en-us/answers/questions/1660311/access-blob-storage-from-azure-sql-server-using-a
- Cargar datos desde Azure Blob Storage en Azure SQL: https://learn.microsoft.com/en-us/shows/data-exposed/load-data-from-azure-blob-storage-into-azure-sql
- Control de acceso a la cuenta de almacenamiento para SQL Server sin servidor: https://docs.azure.cn/en-us/synapse-analytics/sql/develop-storage-files-storage-access-control