将XML传递给节点中的存储过程

我想弄清楚如何使用MSSQL节点驱动程序将XML值传递给存储过程,从文档中我可以看到驱动程序确实支持存储过程,还可以像这样定义自定义数据types:

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

但我还没有find一个例子到目前为止如何做到这一点。

我find了一个类似的问题,但对于一个.NET SQL驱动程序,试图找出是否有人为Node做了这个。

UPDATE

我能够发送一个XML到一个存储过程,并parsing它在数据库中,这里的例子:

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

我不知道这个特例,但有一些一般的想法:

存储过程的input参数(需要一些XML)可以是XMLVARCHARNVARCHAR 。 那么,只要提到这一点, VARBINARY也可以工作,但为什么要这样做…

SQL-Server中的string是8位编码( VARCHAR )或16位( NVARCHAR ), 在任何情况下XML均为NVARCHAR

大多数情况下将隐含地铸造。 您可以将有效的XML作为VARCHARNVARCHAR传递,并将其分配给XMLtypes的variables。 两者都会工作。 但是如果你的XML包含特殊字符,你将会遇到麻烦…

重要提示 :如果XML包含像<?xml ... encoding="utf-8"?>必须将其作为VARCHAR移交给XMLvariables,而utf-16 必须NVARCHAR 。 在SQL Server中,这个声明在任何情况下都会被忽略,所以最简单的方法就是在没有声明的情况下将XML作为string传递。

明确的build议是, 传递一个XML作为16位unicodestring,而不用<?xml ...?> -declaration 。 这样做,将不会有隐式转换,并且不会遇到有特殊字符和/或编码问题的麻烦。

您的SP可以将参数定义为XMLNVARCHAR(MAX)并将其分配给内部的typesvariables。

希望这可以帮助!