Sql server 将XML传递到节点中的存储过程
我试图找出如何使用节点驱动程序将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);
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)
并在内部将其分配给类型化变量
希望这有帮助