Sql server 将XML传递到节点中的存储过程

Sql server 将XML传递到节点中的存储过程,sql-server,node.js,stored-procedures,Sql Server,Node.js,Stored Procedures,我试图找出如何使用节点驱动程序将XML值传递给存储过程,从文档中可以看出,驱动程序确实支持存储过程,您还可以定义如下自定义数据类型: sql.map.register(MyClass, sql.Text); 但到目前为止,我还没有找到一个例子来说明如何使用XML 我确实找到了一个类似的.NETSQL驱动程序,试图弄清楚是否有人对节点执行了此操作 更新 我能够将XML发送到存储过程并在DB中解析它,以下是示例: var request = new sql.Request(connection);

我试图找出如何使用节点驱动程序将XML值传递给存储过程,从文档中可以看出,驱动程序确实支持存储过程,您还可以定义如下自定义数据类型:

sql.map.register(MyClass, sql.Text);
但到目前为止,我还没有找到一个例子来说明如何使用XML

我确实找到了一个类似的.NETSQL驱动程序,试图弄清楚是否有人对节点执行了此操作

更新

我能够将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) {

});
var-request=newsql.request(连接);
var xml='3Test391011'
input('XStock',sql.Xml,Xml);
执行('StockUpdateTest',函数(错误、记录集、返回值、受影响){
});

我不知道这种特殊情况,但有一些一般的想法:

存储过程的输入参数应该包含一些XML,可以是
XML
VARCHAR
NVARCHAR
。好吧,我只想提一下,
VARBINARY
可能也可以,但为什么要这样做呢

SQL Server中的字符串要么是8位编码(
VARCHAR
)要么是16位(
NVARCHAR
),XML在任何情况下都是内部的
NVARCHAR

大多数案例都是隐式铸造的。您可以将有效的XML作为
VARCHAR
NVARCHAR
传递,并将其分配给
XML
类型的变量。两者都会起作用。但是如果您的XML包含特殊字符,您将遇到麻烦

重要:如果XML包含类似
的声明,则它必须作为
VARCHAR
移交给XML变量,而
utf-16
必须是
NVARCHAR
。在任何情况下,SQL Server都会忽略此声明,因此最简单的方法是将XML作为字符串传递,而不使用此类声明

明确的建议是,将XML作为16位unicode字符串传递,而不使用
-声明。这样,就不会出现隐式转换,也不会遇到特殊字符和/或编码问题

SP可以将参数定义为
XML
NVARCHAR(MAX)
并在内部将其分配给类型化变量

希望这有帮助