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

Los*_*der 2 xml sql t-sql sql-server

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

说:col1的值为'abc'现在它有值,附加信息:

<el1>abc</el2>
<el2>someotherinfo</el2>
Run Code Online (Sandbox Code Playgroud)

将信息存储到列中很好,因为它仍然可以作为字符串推入.但是,提取相同的信息并使用/替换来自此列的相同信息'abc'正在其他表中的各种其他连接中使用,这是我无法弄清楚的.

如果来自另一个表的值'abcd'而不丢失其他信息,我怎么能将这些信息输入abcd?

我正在从应用程序端构建XML并在nvarchar()类型的列中更新它.所有列都已被替换为保存XML,因此安全的假设是col1只保存类似于上面提到的XML.按原样推送XML,它工作正常.但是,我应该如何提取信息以在连接中使用它?

如何从此nvarchar()字符串中提取特定元素以在连接中使用它?以前,此列"Col1"仅用作字符串,并且检查是这样完成的:

where tablex.colx = table1.col1
Run Code Online (Sandbox Code Playgroud)

或更新Table2在哪里

OMG*_*ies 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
Run Code Online (Sandbox Code Playgroud)

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

替代版本,使用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)
Run Code Online (Sandbox Code Playgroud)