在T-SQL中从XML中提取nvarchar值:只返回一个字符

时间:2013-11-24 19:40:06

标签: sql xml tsql sql-server-2012 sqlxml

在我的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

1 个答案:

答案 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