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

时间:2010-09-02 17:15:16

标签: sql sql-server xml tsql

我有一个类型为'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

1 个答案:

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