我有一个类型为“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
或者 更新表 2
最佳答案
将 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)
关于sql - 如何从 nvarchar(max) 类型的列中存储和提取 XML 信息,并在连接中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629494/