【问题标题】:Select all xml exclude a single specific node SQL Server选择所有 xml 排除单个特定节点 SQL Server
【发布时间】:2012-01-14 21:34:10
【问题描述】:

我有一列使用 SQL Server 的 Xml 数据类型存储 xml。另外,我有一个 Xpath 查询,可以从我想要删除的 xml 中选择单个节点。所以,我的问题是,除了我需要删除的单个特定节点之外,有没有办法选择列中的所有 xml?我可以选择要删除的节点,但我找不到将其从 xml 的其余部分中删除并保持所有其余部分完好无损的方法。如果有人能给我任何关于如何使用 SQL Server Xml 函数执行此操作的指导,将不胜感激。

【问题讨论】:

  • 请出示您的密码

标签: sql-server sql-server-2008 xquery xquery-sql


【解决方案1】:

你可以这样做:

DECLARE @xml XML
SELECT @xml = YourXmlField
FROM YourTable
WHERE ID = 1

SET @xml.modify('delete /Root/A')
SELECT @xml

因此,您需要将值放入 XML 变量中并使用 modify 删除节点,为要删除的节点提供适当的 XPath。

【讨论】:

  • 感谢您的回复!我试过你说的,我得到了这个错误:不正确使用 XML 数据类型方法“修改”。在这种情况下,需要一个非突变方法。这是我正在使用的产生错误的 XQuery 代码行: pXml.modify('delete /variation/section/layout/area[@type = "Image" and @mode = "logo" and contains(@previewimage, ".jpg")]')
  • 您是否尝试过我提供的 exact 方法,使用 XML 变量?当您以错误的方式使用“修改”时,您会收到该错误 - 例如如果您尝试直接在 SELECT 中执行此操作。您只能将其用作 UPDATE..SET 语句的一部分,或用作 XML 变量上的 SET 的一部分。
  • 太棒了!你是对的,我在选择语句中使用它。我按照你说的修改了,效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多