Ce petit billet démontre que, contrairement à une idée reçue, la manipulation d’une table variable peut être journalisée.

Entrée dans le vif du sujet…

  • Création et traitement (insertion, modification, suppression) xd’une table variable @Tab et récupération de l’identifiant de l’unité d’allocation associée:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
USE tempdb
GO
DECLARE @Tab TABLE (Tab_ID INT, Tab_Name VARCHAR(20))
 
INSERT INTO @Tab VALUES (1,2)
 
UPDATE @Tab SET Tab_Name='bidule' WHERE Tab_ID=1
 
DELETE FROM @Tab
 
SELECT a.allocation_unit_id
FROM sys.system_internals_allocation_units a</span>
  INNER JOIN sys.partitions p ON p.hobt_id = a.container_id
      INNER JOIN sys.columns c ON c.object_id = p.object_id
WHERE (c.name ='Tab_ID')
GO

 Résultat :

  • Consultation du journal des transactions via fn_dblog en ne prenant en compte que l’unité d’allocation récupérée précédemment :
1
2
3
4
5
6
7
8
SELECT Operation,
 Context,
 AllocUnitName,
 [RowLog Contents 0],
 [Log Record LENGTH]
FROM fn_dblog(NULL,NULL)
WHERE AllocUnitId = 2522015792725622784
GO

Résultat :

Les traitements ont bien été journalisés.

Pour aller plus loin…

Pour avoir une comparaison entre les tables temporaires et les tables variables, vous pouvez aller ici.

Share This