繁体   English   中英

如何从nvarchar(max)类型的列中存储和提取XML信息,并在联接中使用它?

[英]How to store and extract XML information from an nvarchar(max) type column, and use it in joins?

我有一个类型为'nvarchar(max)'的列,该列现在应包含XML信息,而不仅仅是字符串。

说:col1具有值'abc'现在它具有值,以及其他信息:

<el1>abc</el2>
<el2>someotherinfo</el2>

将信息存储到列中很好,因为仍然可以将其作为字符串推入。 但是,我无法弄清楚从同一列中提取相同的信息并使用/替换相同信息“ abc”,而该信息正在其他表的各种其他联接中使用。

当来自另一个表的值“ abcd”的信息也不会丢失其他信息时,如何将其推入abcd?

我正在从应用程序端构建XML,并在nvarchar()类型的列中对其进行更新。 所有列已被替换以保存XML,因此安全的假设是col1仅保存与上述类似的XML。 只需按原样推送XML,它就可以正常工作。 但是,我应该如何提取信息以在联接中使用它?

如何从此nvarchar()字符串中提取特定元素以在联接中使用它? 以前,此列'Col1'只是用作字符串,并且进行了如下检查:

where tablex.colx = table1.col1

或更新Table2,其中

将NVARCHAR数据转换为XML数据类型后,就可以使用XML函数来获取要加入的元素/属性值:

WITH xoutput AS (
  SELECT CONVERT(xml, t.nvarchar_column) AS col
    FROM YOUR_TABLE t)
SELECT x.*
  FROM TABLE x
  JOIN xoutput y ON y.col.value('(/path/to/your/element)[1]', 'int') = x.id

由于数据类型转换,它将无法使用索引...

备用版本,使用IN:

WITH xoutput AS (
   SELECT CONVERT(xml, t.nvarchar_column) AS col
     FROM YOUR_TABLE t)
SELECT x.*
  FROM TABLE x
 WHERE x.id IN (SELECT y.col.value('(/path/to/your/element)[1]', 'int')
                  FROM xoutput)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM