在我的T-SQL过程中,我试图使用.value()方法从XML节点中提取字符串值,如下所示:
declare @criteria xml;
set @criteria = N'<criterion id="DocName"><value>abcd</value></criterion>';
declare @val nvarchar;
set @val = @criteria.value('(criterion[@id="DocName"]/value)[1]', 'nvarchar');
select @val;
我希望得到'abcd',但我出乎意料地得到了'a'。
因此,value
方法仅返回字符串的第一个字符。谁能告诉我,我做错了什么?非常感谢。
P.S。我正在使用MS SQL Server 2012
答案 0 :(得分:2)
不要在没有大小的情况下使用nvarchar。来自documentation:
在数据定义或变量声明中未指定n时 声明,默认长度为1.当未指定n时 CAST功能,默认长度为30。
如果您不知道确切的长度,则始终可以使用nvarchar(max)
:
declare @criteria xml;
set @criteria = N'<criterion id="DocName"><value>abcd</value></criterion>';
declare @val nvarchar(max);
set @val = @criteria.value('(criterion[@id="DocName"]/value)[1]', 'nvarchar(max)');
select @val;
<强> sql fiddle demo 强>