将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)可以是XML
, VARCHAR
或NVARCHAR
。 那么,只要提到这一点, VARBINARY
也可以工作,但为什么要这样做…
SQL-Server中的string是8位编码( VARCHAR
)或16位( NVARCHAR
), 在任何情况下 , XML均为NVARCHAR
。
大多数情况下将隐含地铸造。 您可以将有效的XML作为VARCHAR
或NVARCHAR
传递,并将其分配给XML
types的variables。 两者都会工作。 但是如果你的XML包含特殊字符,你将会遇到麻烦…
重要提示 :如果XML包含像<?xml ... encoding="utf-8"?>
则必须将其作为VARCHAR
移交给XMLvariables,而utf-16
必须为NVARCHAR
。 在SQL Server中,这个声明在任何情况下都会被忽略,所以最简单的方法就是在没有声明的情况下将XML作为string传递。
明确的build议是, 传递一个XML作为16位unicodestring,而不用<?xml ...?>
-declaration 。 这样做,将不会有隐式转换,并且不会遇到有特殊字符和/或编码问题的麻烦。
您的SP可以将参数定义为XML
或NVARCHAR(MAX)
并将其分配给内部的typesvariables。
希望这可以帮助!