【问题标题】:Pass XML to a stored procedure in node将 XML 传递给节点中的存储过程
【发布时间】:2017-01-25 21:17:03
【问题描述】:

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

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

但到目前为止我还没有找到如何为 XML 完成的示例。

我确实找到了一个类似的question,但是对于一个 .NET SQL 驱动程序,我试图弄清楚是否有人为 Node.js 做过这个。

更新

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

});

【问题讨论】:

    标签: sql-server node.js stored-procedures


    【解决方案1】:

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

    存储过程的输入参数应该采用一些 XML,可以是 XMLVARCHARNVARCHAR。好吧,顺便提一下,VARBINARY 也可以,但为什么要这样做...

    SQL-Server 中的字符串要么是 8 位编码 (VARCHAR) 要么是 16 位 (NVARCHAR),XML 无论如何 - 在内部是 NVARCHAR

    大多数情况将被隐式转换。您可以将有效的 XML 作为VARCHARNVARCHAR 传递,并将其分配给XML 类型的变量。两者都会起作用。但是如果你的 XML 包含特殊字符,你会遇到麻烦...

    重要提示:如果 XML 包含类似 &lt;?xml ... encoding="utf-8"?&gt; 的声明,则 必须VARCHAR 的形式传递给 XML 变量,而 utf-16 必须NVARCHAR。在任何情况下,SQL Server 中都将省略此声明,因此最简单的方法是将 XML 作为字符串传递而无需此类声明。

    明确的建议是,将 XML 作为 16 位 unicode 字符串传递,而不使用 &lt;?xml ...?&gt;-declaration。这样做不会有隐式转换,也不会遇到特殊字符和/或编码问题的麻烦。

    您的 SP 可以将参数定义为 XMLNVARCHAR(MAX),并在内部将其分配给类型化变量。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多