2017-01-25 6 views
1

MSSQLノードドライバを使用してストアドプロシージャにXML値を渡す方法を解明しようとしています。ドキュメントではドライバがストアドプロシージャをサポートしています。XMLをノード内のストアドプロシージャに渡す

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

このようなカスタムデータ型は、これまでのところXMLのためにどのように行うことができますか?

私は同じようなquestionを見つけましたが、.NET SQLドライバでは、誰でもこれをNodeに対して行ったかどうかを調べようとしました。

UPDATE

私は、ストアドプロシージャにXMLを送信し、DBにそれを解析することができました、ここでは例です:

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) { 

}); 

答えて

3

私は、この特殊なケースを知っているが、そこにあるありません

XMLを使用するストアドプロシージャの入力パラメータは、,VARCHARまたはNVARCHARのいずれかです。まあ、これだけ、VARBINARYがあまりにもうまくいくかもしれないが、なぜ1がこれを行う必要があります...

SQL-Serverの文字列が8ビットの符号化(VARCHAR)または16ビット(NVARCHAR)のいずれかである、XMLを言及しますいずれにしてもNVARCHARは内部でです。

ほとんどの場合、暗黙的にキャストされます。有効なXMLをVARCHARまたはNVARCHARとして渡して、これをXMLの変数に割り当てます。両方とも動作します。あなたのXMLに特殊文字が含まれている場合しかし、あなたは...トラブルに

重要を取得します:XMLはutf-16なければならないが、それはVARCHARとしてXML変数に引き渡さなければなりません<?xml ... encoding="utf-8"?>のような宣言が含まれている場合NVARCHARとなります。この宣言はSQL Serverでは省略されます。そのような宣言なしでXMLを文字列として渡すのが最も簡単です。

明確な助言は、を除き、<?xml ...?>のない16ビットのUnicode文字列としてXMLを渡します。そうすることで、暗黙的なキャスティングがなくなり、特殊文字やエンコードの問題でトラブルに遭遇することはありません。

SPは、パラメータをXMLまたはNVARCHAR(MAX)と定義し、内部的に型付き変数に割り当てることができます。

希望すると便利です。

+0

素晴らしい回答!ありがとう! – inside

関連する問題