我有一个类型为'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
答案 0 :(得分:7)
将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)