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

标签 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

最佳答案

将 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/

相关文章:

mysql - 为没有任何解锁组的用户标记

Python,将 9 个元组 UTC 日期转换为 MySQL 日期时间格式

php - 找不到数据库?

php - PHP 和 SSManagement Studio 中的 TSQL 执行结果不同

c# - SQL Server 数据库中数据类型 nchar 的问题

mysql - 如何选择所有帖子的标签?

sql - SQL Server中从日期+时间获取日期最有效的方法?

java - Hybris Commerce Cuppy 扩展安装失败

Android-键盘启动时如何自动滚动

javascript - 如何将 XML 内容附加到 HTML 元素,就好像它是 HTML 一样并应用 CSS 样式?