【问题标题】:Problems querying XML in SQL Server 2014在 SQL Server 2014 中查询 XML 的问题
【发布时间】:2023-03-09 01:06:01
【问题描述】:

我有一个具有以下结构的 XML:

    <SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">
  <SSIS:Parameter SSIS:Name="AccountID">
    <SSIS:Properties>
      <SSIS:Property SSIS:Name="ID">{736c5778-eb62-4227-8f1f-da3bb23be0b8}</SSIS:Property>
      <SSIS:Property SSIS:Name="CreationName" />
      <SSIS:Property SSIS:Name="Description">Account ID</SSIS:Property>
      <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Required">1</SSIS:Property>
      <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Value">ACC12345678</SSIS:Property>
      <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
    </SSIS:Properties>
  </SSIS:Parameter>
  <SSIS:Parameter SSIS:Name="QueryKey">
    <SSIS:Properties>
      <SSIS:Property SSIS:Name="ID">{11c138a0-6a8c-4507-b746-14cdc9344fbf}</SSIS:Property>
      <SSIS:Property SSIS:Name="CreationName" />
      <SSIS:Property SSIS:Name="Description">Key</SSIS:Property>
      <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Required">1</SSIS:Property>
      <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Value">hjdhfhuienrfuuejj837jjam</SSIS:Property>
      <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
    </SSIS:Properties>
  </SSIS:Parameter>
  <SSIS:Parameter SSIS:Name="DateTime">
    <SSIS:Properties>
      <SSIS:Property SSIS:Name="ID">{631d01ab-4fcc-4128-a08b-ae1d7f13e87e}</SSIS:Property>
      <SSIS:Property SSIS:Name="CreationName" />
      <SSIS:Property SSIS:Name="Description" />
      <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Required">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Value">2017-03-24T15:55:12</SSIS:Property>
      <SSIS:Property SSIS:Name="DataType">16</SSIS:Property>
    </SSIS:Properties>
  </SSIS:Parameter>
</SSIS:Parameters>

我尝试使用 SQL Server SELECT 语句,但无法正常工作。 您知道如何选择数据吗? 我需要在一行中获取像“AccountID”这样的名称、值“ACC12345678”和数据类型“18”。

提前致谢。

亲切的问候,

阿奇先生

【问题讨论】:

  • 显示您尝试使用的代码以及运行 select 语句时得到的结果

标签: sql-server xml sql-server-2014


【解决方案1】:

试试这样:

DECLARE @xml XML='<SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">
  <SSIS:Parameter SSIS:Name="AccountID">
    <SSIS:Properties>
      <SSIS:Property SSIS:Name="ID">{736c5778-eb62-4227-8f1f-da3bb23be0b8}</SSIS:Property>
      <SSIS:Property SSIS:Name="CreationName" />
      <SSIS:Property SSIS:Name="Description">Account ID</SSIS:Property>
      <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Required">1</SSIS:Property>
      <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Value">ACC12345678</SSIS:Property>
      <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
    </SSIS:Properties>
  </SSIS:Parameter>
  <SSIS:Parameter SSIS:Name="QueryKey">
    <SSIS:Properties>
      <SSIS:Property SSIS:Name="ID">{11c138a0-6a8c-4507-b746-14cdc9344fbf}</SSIS:Property>
      <SSIS:Property SSIS:Name="CreationName" />
      <SSIS:Property SSIS:Name="Description">Key</SSIS:Property>
      <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Required">1</SSIS:Property>
      <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Value">hjdhfhuienrfuuejj837jjam</SSIS:Property>
      <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
    </SSIS:Properties>
  </SSIS:Parameter>
  <SSIS:Parameter SSIS:Name="DateTime">
    <SSIS:Properties>
      <SSIS:Property SSIS:Name="ID">{631d01ab-4fcc-4128-a08b-ae1d7f13e87e}</SSIS:Property>
      <SSIS:Property SSIS:Name="CreationName" />
      <SSIS:Property SSIS:Name="Description" />
      <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Required">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
      <SSIS:Property SSIS:Name="Value">2017-03-24T15:55:12</SSIS:Property>
      <SSIS:Property SSIS:Name="DataType">16</SSIS:Property>
    </SSIS:Properties>
  </SSIS:Parameter>
</SSIS:Parameters>';  

查询将使用别名“ns”定义您的命名空间。我使用谓词来获取正确的属性并返回具有类型安全值的每个属性。剩下的就看你自己了……

WITH XMLNAMESPACES('www.microsoft.com/SqlServer/SSIS' AS ns)
SELECT prm.value('(@ns:Name)[1]','nvarchar(max)') AS Parameter_Name
      ,prm.value('(ns:Properties/ns:Property[@ns:Name="ID"]/text())[1]','nvarchar(max)') AS Parameter_ID
      ,prm.value('(ns:Properties/ns:Property[@ns:Name="IncludeInDebugDump"]/text())[1]','bit') AS Parameter_IncludeInDebugDump
FROM @xml.nodes('/ns:Parameters/ns:Parameter') AS A(prm)

【讨论】:

  • 哇,非常感谢...... :-) 它有效......我真的想不出这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
相关资源
最近更新 更多