我试图弄清楚如何使用MSSQL节点驱动程序将XML值传递给存储过程,从文档中我可以看到驱动程序支持存储过程,并且还定义了自定义数据类型,如这个:
sql.map.register(MyClass, sql.Text);
但我还没有找到一个例子,到目前为止如何为XML做到这一点。
我确实找到了类似的question但是对于.NET SQL驱动程序,试图弄清楚是否有人为Node做过这个。
更新
我能够将XML发送到存储过程并在数据库中解析它,例如:
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) {
});
答案 0 :(得分:3)
我不知道这个特例,但有一些一般性的想法:
存储过程的输入参数(可能需要一些XML)可以是XML
,VARCHAR
或NVARCHAR
。好吧,仅举这一点,VARBINARY
也可能有效,但为什么要这样做......
SQL-Server中的字符串是8位编码(VARCHAR
)或16位(NVARCHAR
), XML - 在任何情况下 - NVARCHAR
内部强>
大多数情况都会被隐含地呈现。您可以将有效的XML作为VARCHAR
或NVARCHAR
传递,并将其分配给XML
类型的变量。两者都有效。但是,如果您的XML包含特殊字符,您将遇到麻烦......
重要:如果XML包含<?xml ... encoding="utf-8"?>
之类的声明,则必须以VARCHAR
的形式移交给XML变量,而utf-16
1}} 必须为NVARCHAR
。在任何情况下,SQL Server中都会省略此声明,因此最简单的方法是将XML作为字符串传递而不进行此类声明。
明确的建议是,将XML作为16位unicode字符串传递,而不是<?xml ...?>
- 声明。这样做,就不会有隐式转换,也不会遇到特殊字符和/或编码问题。
您的SP可以将参数定义为XML
或NVARCHAR(MAX)
,并将其内部分配给类型变量。
希望这有帮助!