我有一个具有以下结构的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'。
提前致谢。
亲切的问候,
MrAkki
答案 0 :(得分:0)
试试这样:
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)