Heim > Artikel > Backend-Entwicklung > Verwenden von XML und SQL 2000 zum Verwalten gespeicherter Prozeduraufrufe
Das Erstellen mehrerer gespeicherter Prozeduren (Stored PROcedure) mit unterschiedlichen Parametern zur Erledigung derselben Aufgabe ist immer eine große Belastung. Die Verwendung von XML-Strings zum Senden von Parametern an Ihre gespeicherten Prozeduren kann diese Aufgabe vereinfachen; dadurch wird auch das Design von COM-Komponenten einfacher.
Dies erreichen Sie, indem Sie Ihre Parameter als XML-String übergeben, das XML analysieren, um die benötigten Daten abzurufen, und dann mit der Implementierung der Funktionalität fortfahren, die Sie integrieren müssen. Sie können nicht nur einige Parameter über XML abrufen, sondern auch Abfragen für das von XML erstellte DOM-Dokument ausführen, um mehrere gespeicherte Prozeduren zu kapseln. Ich werde einige Beispiele dafür liefern, wie dies erreicht werden kann, und jedes Beispiel kurz beschreiben.
In diesem Beispiel werde ich mehrere Parameter übergeben, um das Namensfeld in einer Kundentabelle zu aktualisieren. Das XML wird analysiert, um die Kunden-ID (Identitätsspalte) und das neue Namensfeld zu erhalten. Der XML-String, den ich an die Prozedur übergebe, sieht folgendermaßen aus:
<root><Customer><customerid>3</customerid><name>Acme Inc.</name></Customer></root>
Das zu erstellende Speicherfeld sieht folgendermaßen aus:
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
Dieser Prozess wird zuerst deklariert dass die von uns verwendeten Variablen relevante Informationen speichern. Danach wird das DOM-Dokument geöffnet und ein „Handle“ als erster Parameter des sp_xml_preparedocument-Aufrufs zurückgegeben.
Das zweite Argument dieses Aufrufs ist die XML-Quelldatei für das neue DOM-Dokument. Dieses „Handle“ wird verwendet, um bei OPENXML-Aufrufen Informationen aus dem DOM abzufragen. Der zweite Parameter des OPENXML-Aufrufs ist eine Xpath-Zuordnung der übergeordneten Knoten, die die auszuführenden Daten enthalten.
Der dritte Parameter (2) gibt an, dass eine elementzentrierte Zuordnung verwendet wird. Die WITH-Klausel stellt ein Rowset-Format für die analysierten Daten bereit, und der Aufruf von sp_xml_removedocument löscht die Quelldatei des DOM-Dokuments.
Im folgenden Beispiel übergebe ich eine Reihe von Benutzer-IDs, um mehrere Datenspalten zu löschen. Das Folgende ist der Inhalt der XML-Zeichenfolge:
<root><Customer><customerid>1</customerid></Customer><Customer><customerid> 2</customerid></Customer><Customer><customerid>3</customerid></Customer> </root>
Die entsprechende gespeicherte Prozedur sieht wie folgt aus:
. . . 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)) . . .
Ja Mit dieser gespeicherten Prozedur müssen Sie keine lange SQL-Abfragezeichenfolge mehr erstellen, um sie in ADO zu übergeben oder eine gespeicherte Prozedur mehrmals aufzurufen. Dadurch werden auch die Auswirkungen mehrerer Anrufe auf den Netzwerkverkehr eliminiert.
Wie Sie sehen, erleichtert Microsoft SQL 2000 den gesamten Prozess ein wenig. Bedenken Sie, dass der Nachteil dieses Ansatzes darin besteht, dass bei der Ausführung von XML-Aufgaben durch SQL 2000 das Senden von XML als Parameter auf 8.000 Zeichen begrenzt ist. Wie immer sollten Sie die Vorteile einer sorgfältigen Planung nicht außer Acht lassen.
Besuchen Sie die MSDN-Bibliothek, um weitere Informationen zu OPENXML, sp_xml_preparedocument und sp_xml_removedocument zu erhalten.
Das Obige ist der Inhalt der Verwendung von XML und SQL 2000 zum Verwalten gespeicherter Prozeduraufrufe. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!