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

Sql 如何从nvarchar(max)类型的列中存储和提取XML信息,并在联接中使用它?,sql,sql-server,xml,tsql,Sql,Sql Server,Xml,Tsql,我有一个“nvarchar(max)”类型的列,它现在应该保存XML信息,而不仅仅是一个字符串 假设:col1的值为“abc” 现在它有了值,还有其他信息: <el1>abc</el2> <el2>someotherinfo</el2> 或 更新表2,其中将NVARCHAR数据强制转换为XML数据类型后,可以使用XML函数获取元素/属性值,以便连接到: WITH xoutput AS ( SELECT CONVERT(xml, t.nvarc

我有一个“nvarchar(max)”类型的列,它现在应该保存XML信息,而不仅仅是一个字符串

假设:col1的值为“abc” 现在它有了值,还有其他信息:

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

更新表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
它将无法使用索引,因为数据类型转换

备用版本,用于:

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)

什么是RDBMS和版本?如果SQL Server有任何原因不能使用
XML
数据类型?我假设这是MS SQL Server。在SQL Server中使用的是哪个版本,您需要有一列数据类型为
XML
的列才能从中提取位。将列转换为XML(首选方式),或者在查询
cast(列为XML)
之前将列转换为XML,这样做行吗?我正在尝试,但它似乎没有回报!col2是int类型。col1是XML,因此,现在col2 value是abc somethingelse之间的值,/el2>选择convert(XML,col1)作为表1中的col1;选择table2.col2=convert(int,ISNULL(col2.value(“/el1[1]”),“int”),-1)@Amy:我修复了一个拼写错误,但这是两个独立的语句,但我会检查select convert(XML col2.value(“(/el1)[1]”,'int'))从您的_表中,`正在返回正确的信息,然后我将尝试使用它连接到另一个表。您好,是的,我正在获取值:
选择CONVERT(XML,col1)。value('(/root/el1)[1]',int')作为el1@Amy:下一步是确认从该查询返回的值是否存在于您要加入的table.column中。是的,它们存在。此外,我无法为此执行“where”条件。例如,从table2中选择*其中table2.col2=CONVERT(XML,Table1.Col1)。value(“(/root/el1)[1],“int”);失败:无法绑定多部分标识符“Table1.Col1”。
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)