2017-01-25 4 views
1

Ich versuche herauszufinden, wie ein XML-Wert an eine gespeicherte Prozedur übergeben MSSQL Node-Treiber, aus der Dokumentation kann ich sehen, dass der Treiber gespeicherte Prozeduren unterstützt, und Sie definieren auch benutzerdefinierte Datentypen wie folgt aus:Übergeben Sie XML an eine gespeicherte Prozedur in Knoten

sql.map.register(MyClass, sql.Text); 

aber ich habe nicht ein Beispiel, wie es getan werden kann für XML bisher gefunden.

Ich fand eine ähnliche question aber für einen .NET SQL-Treiber, versuchen herauszufinden, ob jemand dies für Node getan hat.

UPDATE

konnte ich eine XML an eine gespeicherte Prozedur senden und sie in DB zu analysieren, hier ist das Beispiel:

var request = new sql.Request(connection); 
var xml = '<root><stock><id>3</id><name>Test3</name><ask>91011</ask></stock></root>' 
request.input('XStock', sql.Xml, xml); 

request.execute('StockUpdateTest', function (err, recordsets, returnValue, affected) { 

}); 

Antwort

3

ich diesen speziellen Fall nicht wissen, aber es gibt einige allgemeine Ideen:

der Eingangsparameter einer gespeicherten Prozedur, die einige XML nehmen soll, kann entweder XML, VARCHAR oder NVARCHAR sein. Nun, genau dies zu erwähnen, VARBINARY könnte auch funktionieren, aber warum sollte man dies tun ...

Eine Zeichenfolge in SQL-Server wird entweder 8-Bit codiert (VARCHAR) oder 16 Bit (NVARCHAR), XML ist - auf jeden Fall - NVARCHAR intern.

Die meisten Fälle werden implizit ausgeführt. Sie können eine gültige XML-Datei als VARCHAR oder als NVARCHAR übergeben und diese einer Variablen vom Typ XML zuweisen. Beide werden funktionieren. Aber Sie werden in Schwierigkeiten kommen, wenn die XML-Sonderzeichen enthält ...

Wichtige: Wenn die XML enthält eine Erklärung, wie <?xml ... encoding="utf-8"?> es muss werden, um das XML-Variable übergeben als VARCHAR, während utf-16Muss sei NVARCHAR. Diese Deklaration würde in SQL Server in jedem Fall weggelassen werden, so einfach ist es, das XML als String ohne eine solche Deklaration zu übergeben.

Der klare Rat ist, zu eine XML als 16-Bit-Unicode-String übergeben, ohne <?xml ...?> -Erklärung. Wenn du dies tust, wird es kein implizites Casting geben und du wirst keine Probleme mit Sonderzeichen und/oder Kodierungsproblemen haben.

Ihr SP kann den Parameter entweder als XML oder als NVARCHAR(MAX) definieren und intern einer typisierten Variablen zuweisen.

Hoffe, das hilft!

+0

große Antwort! Vielen Dank! – inside

Verwandte Themen