Frédéric Colin
SQL Server 2005 : suppression ensembliste paramétrée et XML
Cette petite astuce va vous montrer comment utiliser un document XML en entrée d'une procédure stockée et s'en servir comme une source de données en T
Par Frédéric Colin publié le 16/06/2005 à 08:01, lu 11914 fois,
Lorsque l'on souhaitait réaliser une suppression ensembliste paramétrée avec SQL Server 2000, on pouvait notamment :
  • Générer du Transact-SQL à la volée par la couche composant. Personnellement, je n'aime pas trop stocker les ordres SQL dans mes composants
  • Utiliser une procédure stockée qui admette en paramètre une chaîne de caractères contenant la clause IN, puis utilisation de l'instruction EXEC. Personnellement, je n'aime pas trop les procédures stockées Dynamiques
  • Utiliser l'instruction OPENXML cf. l'article SQL Server 2000 – Episode II : XML, mais qui avait pour inconvénient majeur de ne plus pouvoir paramétrer SQL Server 2000 en mode "fiber"
SQL Server 2005 et son type XML natif permet de le faire simplement.

Imaginons qu'une application construise un document XML de ce type et le passe à une procédure stockée. Les « id » correspondent aux identifiants des enregistrements que l'on souhaite supprimer en base.
<ids>
    <id>1</id>
    <id>2</id>
</ids>
Commençons par créer une fonction qui va construire une table à partir de ce jeu de données XML :
CREATE FUNCTION [dbo].[BuildTableOfIDsFromXML](@data xml)
RETURNS TABLE WITH SCHEMABINDING AS
RETURN
    SELECT nref.value('.', 'INT') as IDToDelete
    FROM @data.nodes('/ids/id') R(nref)
Puis créons une procédure stockée utilisant cette fonction.
ALTER PROCEDURE [dbo].[sDeleteTableByIDs]
(
    @ids XML
)
AS

BEGIN
    DELETE FROM 
        tTable
    WHERE
        TableID IN (SELECT * FROM dbo.BuildTableOfIDsFromXML(@ids))
END
Et hop, le tour est joué sur SQL Server 2005 BETA 2 (Community Technology Preview 9.00.1116.00).
 
» Démarrer une discussion