T-SQL possède une clause OUTPUT qui permet de récupérer les lignes modifiées ou supprimées lorsqu’on exécute une requête. Elle peut être utilisée par exemple, lorsqu'on veut suivre les modifications effectuées sur la base pour des besoins d'audit.
Dans cet article, j'utiliserai les données de la base AdventureWorks.
INSERT avec OUTPUT
On peut utiliser OUTPUT pour afficher les données modifiées comme on le ferait avec SELECT ou les insérer dans une table avec SELECT INTO. Par exemple, si vous voulez afficher les données insérées dans la table [SalesLT].[ProductCategory] :
INSERT INTO [SalesLT].[ProductCategory]
(
[Name]
,[rowguid]
,[ModifiedDate]
)
OUTPUT
inserted.Name,
inserted.rowguid,
inserted.ModifiedDate
SELECT
CONCAT([Name], ' ', '2')
,NEWID()
,GETDATE()
FROM [SalesLT].[ProductCategory]
WHERE [ProductCategoryID] IN (10, 20, 30)
On obtient le résultat suivant:
On utilise le préfixe inserted pour identifier les colonnes des lignes créées.
Vous pouvez également insérer ces données dans une table en utilisant la syntaxe suivante:
INSERT INTO [SalesLT].[ProductCategory]
(
[Name]
,[rowguid]
,[ModifiedDate]
)
OUTPUT
inserted.Name,
inserted.rowguid,
inserted.ModifiedDate
INTO @Mytable([Name], [rowguid], [ModifiedDate])
SELECT
CONCAT([Name], ' ', '4')
,NEWID()
,GETDATE()
FROM [SalesLT].[ProductCategory]
WHERE [ProductCategoryID] IN (10, 20, 30)
Vous pouvez également utiliser OUTPUT pour afficher les lignes supprimées.
On utilisera alors le préfixe deleted pour identifier les colonnes supprimées.
Par exemple, vous voulez afficher les ligne supprimées de la table [SalesLT].[ProductCategory].
DELETE FROM [SalesLT].[ProductCategory]
OUTPUT
deleted.Name
,deleted.rowguid
,deleted.ModifiedDate
WHERE [ProductCategoryID] > 41
On obtient:
Comme avec INSERT, vous pouvez insérer les lignes supprimées dans une table.
DELETE FROM [SalesLT].[ProductCategory]
OUTPUT
deleted.Name
,deleted.rowguid
,deleted.ModifiedDate
INTO @Mytable([Name], [rowguid], [ModifiedDate])
WHERE [ProductCategoryID] > 41
UPDATE avec OUTPUT
Avec UPDATE, on a accès à l'état des lignes avant et après modifications. Pour l'état avant modification, on utilise le préfixe deleted et pour l'état après on utilise inserted.
Par exemple
UPDATE [SalesLT].[ProductCategory]
SET [Name] = CONCAT([Name], ' ', 'new')
OUTPUT
deleted.Name as [old name]
,inserted.name as [new name]
,deleted.rowguid
,deleted.ModifiedDate
WHERE [ProductCategoryID] IN (5,10,15)
on obtient
Et bien sur, comme avec delete et insert on peut mettre ces infos dans une table en utilisant INTO.
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here:
Politique relative aux cookies
Laisser un commentaire