Aller au contenu

Exemples de code — Patterns clés

Pattern SCD2 — Procédure MERGE

-- sp_merge_dim_vendor (résumé logique)
-- Cas 1 : Nouveau vendeur
IF NOT EXISTS (SELECT 1 FROM dim_vendor WHERE vendor_id = @vendor_id)
BEGIN
    INSERT INTO dim_vendor (vendor_id, vendor_name, commission_rate, valid_from, is_current)
    VALUES (@vendor_id, @vendor_name, @commission_rate, SYSUTCDATETIME(), 1)
END

-- Cas 2 : Changement d'attribut tracké
ELSE IF EXISTS (
    SELECT 1 FROM dim_vendor
    WHERE vendor_id = @vendor_id AND is_current = 1
      AND commission_rate <> @commission_rate  -- ou autre attribut tracké
)
BEGIN
    -- Fermer la version courante
    UPDATE dim_vendor SET valid_to = SYSUTCDATETIME(), is_current = 0
    WHERE vendor_id = @vendor_id AND is_current = 1

    -- Ouvrir une nouvelle version
    INSERT INTO dim_vendor (vendor_id, vendor_name, commission_rate, valid_from, is_current)
    VALUES (@vendor_id, @vendor_name, @commission_rate, SYSUTCDATETIME(), 1)
END

-- Cas 3 : Changement mineur (email uniquement)
ELSE
BEGIN
    UPDATE dim_vendor SET vendor_email = @vendor_email
    WHERE vendor_id = @vendor_id AND is_current = 1
END

Voir script complet : sql/scd2/dim_vendor_merge.sql


Pattern monitoring DMV Azure SQL

-- Détection pipeline silencieux (fact_order)
SELECT
    CASE
        WHEN DATEDIFF(MINUTE, MAX(order_timestamp), GETUTCDATE()) > 10
        THEN 'ALERTE — Aucune commande depuis ' +
             CAST(DATEDIFF(MINUTE, MAX(order_timestamp), GETUTCDATE()) AS NVARCHAR) + ' min'
        ELSE 'OK'
    END AS statut_pipeline
FROM dbo.fact_order;

Pattern backup BACPAC

# Export asynchrone Azure SQL → Blob Storage
az sql db export \
  --admin-password '***' \
  --admin-user sqladmin \
  --storage-key-type StorageAccessKey \
  --storage-key $STORAGE_KEY \
  --storage-uri "https://stshopnowbackup.blob.core.windows.net/sql-backups/weekly/dwh-shopnow-$(date +%F).bacpac" \
  --name dwh-shopnow \
  --resource-group rg-e6-sbuasa \
  --server sql-server-rg-e6-sbuasa

Pattern requête historique SCD2

-- Historique complet des commissions d'un vendeur
SELECT
    vendor_id,
    vendor_name,
    commission_rate,
    valid_from,
    ISNULL(CONVERT(NVARCHAR(20), valid_to), 'en cours') AS valid_to,
    is_current
FROM dbo.dim_vendor
WHERE vendor_id = 'V001'
ORDER BY valid_from;

Résultat réel (2026-03-12) :

vendor_id  commission_rate  valid_from                   valid_to                     is_current
V001       12.50            2026-03-12 12:40:56.203      2026-03-12 12:41:48.559      0
V001       14.00            2026-03-12 12:41:48.559      en cours                     1