【问题标题】:Retrieving the only value from XML string从 XML 字符串中检索唯一的值
【发布时间】:2018-03-08 18:57:38
【问题描述】:

这是我的 XML 数据类型为 nvarchar(MAX) 的字符串:

declare @string Nvarchar(MAX)
set @string='<ROOT><Data  C="1" /><Data  C="2" /><Data  C="3" /></ROOT>'

预期结果:

@c='1,2,3'

i want to check that the value of "C" is exists in table or not

【问题讨论】:

  • 您想检查1,2,3 的值是否作为C 标签中的值存在,对吧?
  • @gotqn 是的,我将该值存储在变量中,然后应用存在
  • @c 的值似乎是 CSV。在XML 中,C 标记有不同的值。所需的输出将是 1,因为在 csv 中我们有 1,2,3,在 XML 中我们有 1, 10, 20,对吧?
  • 抱歉检查更新的问题,我在 xml 中收到 int 格式的值
  • 请。使用 XML 时避免使用 Nvarchar(MAX)。

标签: sql sql-server database sql-server-2008 tsql


【解决方案1】:

您可以使用以下代码以表格格式获取值:

declare @string Nvarchar(MAX)
set @string='<ROOT><Data  C="1" /><Data  C="2" /><Data  C="3" /></ROOT>'

DECLARE @StringXML XML = CAST(@string as XML);

SELECT T.c.value('(./@C)[1]', 'INT')
FROM @StringXML.nodes('ROOT/Data') T(c);

然后,您可以应用EXIST 子句。

SELECT STUFF
(
    (
        SELECT ',' + T.c.value('(./@C)[1]', 'VARCHAR(12)')
        FROM @StringXML.nodes('ROOT/Data') T(c)
        FOR XML PATH(''), TYPE
    ).value('.', 'VARCHAR(MAX)')
    ,1
    ,1
    ,''
);

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多