Maison > Article > développement back-end > Utilisation de XML et SQL 2000 pour gérer les appels de procédures stockées
Créer plusieurs procédures stockées (stored PRocedure) avec différents paramètres pour effectuer la même tâche est toujours un gros fardeau. Cette tâche peut être simplifiée en utilisant des chaînes XML pour envoyer des paramètres à vos procédures stockées ; cela facilite également la conception des composants COM.
La façon d'y parvenir est de transmettre vos paramètres sous forme de chaîne XML, d'analyser le XML pour récupérer les données dont vous avez besoin, puis de procéder à la mise en œuvre des fonctionnalités que vous devez intégrer. Non seulement vous pouvez obtenir certains paramètres via XML, mais vous pouvez également exécuter des requêtes sur le document DOM créé par XML pour encapsuler plusieurs procédures stockées. Je vais fournir quelques exemples de la façon d'y parvenir et décrire brièvement chaque exemple.
Dans cet exemple, afin de mettre à jour le champ nom dans une table Customer, je vais passer plusieurs paramètres. Le XML est analysé afin d'obtenir l'identifiant client (colonne identité) et le nouveau champ nom. La chaîne XML que je passe à la procédure ressemble à ceci :
<root><Customer><customerid>3</customerid><name>Acme Inc.</name></Customer></root>
Le champ de stockage à créer ressemble à ceci :
CREATE PROCEDURE update_Customer (@xmldatavarchar(8000)) ASDECLARE @customeridintDECLARE @customernamevarchar(50)DECLARE @xmldata_idint EXEC sp_xml_preparedocument @xmldata_id OUTPUT, @xmldata, '' SELECT @customerid = customerid, @customername = [name] FROM OPENXML(@xmldata_id, '//Customer', 2) WITH (customeridint, [name] varchar(50)) EXEC sp_xml_removedocument @xmldata_id UPDATE Customer SET Customer.[name] = ISNULL(@customername, Customer.[name])WHERE Customer.tblID = @customerid
Ce processus déclare d'abord que les variables que nous utiliserons stockeront des informations pertinentes. Après cela, le document DOM est ouvert et un « handle » est renvoyé comme premier paramètre de l'appel sp_xml_preparedocument.
Le deuxième argument de cet appel est le fichier source XML du nouveau document DOM. Ce "handle" est utilisé pour interroger des informations sur le DOM lors des appels OPENXML. Le deuxième paramètre de l'appel OPENXML est une carte Xpath des nœuds parents contenant les données à exécuter.
Le troisième paramètre (2) précise que le mappage centré sur l'élément sera utilisé. La clause WITH fournit un format d'ensemble de lignes pour les données analysées et l'appel sp_xml_removedocument supprimera le fichier source du document DOM.
Dans l'exemple suivant, je vais transmettre une série d'ID utilisateur pour supprimer plusieurs colonnes de données. Voici le contenu de la chaîne XML :
<root><Customer><customerid>1</customerid></Customer><Customer><customerid> 2</customerid></Customer><Customer><customerid>3</customerid></Customer> </root>
La procédure stockée correspondante ressemble à ce qui suit :
. . . EXEC sp_xml_preparedocument @xml_id OUTPUT, @xmldata, '' DELETE FROM Customer WHERE Customer.tblID IN (SELECT customerid FROM OPENXML(@xmldata_id, '//Customer', 2) WITH (customeridint)) . . .
Oui Avec cette procédure stockée, vous n'avez plus besoin de créer une longue chaîne de requête SQL à transmettre dans ADO ou d'appeler une procédure stockée plusieurs fois. Cela élimine également l'impact de plusieurs appels sur le trafic réseau.
Comme vous pouvez le constater, SQL 2000 de Microsoft rend l'ensemble du processus un peu plus facile. Gardez à l'esprit que l'inconvénient de cette approche est que lorsque SQL 2000 effectue des tâches XML, l'envoi de XML en tant que paramètre est limité à 8 000 caractères. Comme toujours, ne négligez pas les avantages d’une planification minutieuse.
Visitez la bibliothèque MSDN pour obtenir plus d'informations sur OPENXML, sp_xml_preparedocument et sp_xml_removedocument.
Ce qui précède est le contenu de l'utilisation de XML et SQL 2000 pour gérer les appels de procédures stockées. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !