Skip to main content

Command Palette

Search for a command to run...

Acceso a archivos almacenados en Azure

Updated
3 min read

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

  1. Accedí al portal de Azure.

  2. Accedí y creé una Storage Account.

  1. Dentro de la cuenta, creé un contenedor llamado xmlfiles.

    • Lo dejé Private (sin acceso anónimo) para seguridad.

  1. 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>
  1. 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é:

  1. Master Key

    • Cifra las credenciales dentro de la base de datos.
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'algunacontraseñafuerte';
  1. 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';
  1. 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

  1. Declaré una variable @xml de tipo XML.

  2. Usé OPENROWSET con BULK para leer el archivo completo desde el contenedor.

  3. 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