将 xml.param SSIS 文件读入 SQL
Read xml .param SSIS file into SQL
我还没有看到 xml 与当前 postings 类似的文件。我尝试使用的文件是 Project.params SSIS 文件,如下所示:
<SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">
<SSIS:Parameter SSIS:Name="PackageVersion">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{673faa65-53ec-483d-8af2-960987977177}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName" />
<SSIS:Property SSIS:Name="Description">The package version</SSIS:Property>
<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">1.0.0</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
<SSIS:Parameter SSIS:Name="Debug">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{501b3d7c-f7ac-429b-bb2d-c314649d9c98}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName" />
<SSIS:Property SSIS:Name="Description">Determines whether the package is ran in debug mode</SSIS:Property>
<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">true</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">3</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
</SSIS:Parameters>
我尝试在此处关注 post:
只是没有成功获取数据。这是我到目前为止的代码:
;WITH rs (xmldata) AS
(
SELECT TRY_CAST(BulkColumn AS XML) AS BulkColumn
FROM OPENROWSET(BULK 'C:\Software\Project.params', SINGLE_BLOB) AS x
),cte AS
(
SELECT a.value('@Parameter', 'NVARCHAR(50)') AS Parameter
, c.value('@ID','NVARCHAR(50)') AS ID
, c.value('@CreationName','NVARCHAR(50)') AS CreationName
, c.value('@Description','NVARCHAR(100)') AS [Description]
, c.value('@IncludeInDebugDump','INT') AS IncludeInDebugDump
, c.value('@Required','INT') AS [Required]
, c.value('@Sensitive','INT') AS Sensitive
, c.value('@Value','NVARCHAR(10)') AS [Value]
, c.value('@DataType','INT') AS DataType
FROM rs AS tbl
CROSS APPLY tbl.xmldata.nodes('/Parameters') AS t1(a)
OUTER APPLY t1.a.nodes('/Parameter') AS t2(b)
OUTER APPLY t2.b.nodes('/Properties') AS t3(c)
OUTER APPLY t3.c.nodes('/Property') AS t4(d)
)
select * from cte
这运行成功(第一个 cte rs 正确提取数据)但第二个 cte returns 没有数据。没有错误,我得到了结果中的列,只是没有行。任何指导将不胜感激。
您需要在查询中指定名称空间,您需要根据属性值过滤节点,这很冗长,但这应该适合您,但您必须添加您需要的其余列需要。
MS SQL Server 2017 架构设置:
查询 1:
Declare @xmldata as xml =
'<SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">
<SSIS:Parameter SSIS:Name="PackageVersion">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{673faa65-53ec-483d-8af2-960987977177}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName" />
<SSIS:Property SSIS:Name="Description">The package version</SSIS:Property>
<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">1.0.0</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
<SSIS:Parameter SSIS:Name="Debug">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{501b3d7c-f7ac-429b-bb2d-c314649d9c98}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName" />
<SSIS:Property SSIS:Name="Description">Determines whether the package is ran in debug mode</SSIS:Property>
<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">true</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">3</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
</SSIS:Parameters>'
查询如下:
;WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/SSIS' as ns),
RS AS
(
SELECT @xmldata as xmlData
)
SELECT Parm.value('@ns:Name', 'NVARCHAR(50)') AS Parameter,
Id.value('.', 'NVARCHAR(50)') AS Id,
CreationName.value('.', 'NVARCHAR(50)') AS CreationName,
[Description].value('.', 'NVARCHAR(100)') AS [Description]
FROM RS
CROSS APPLY xmlData.nodes('/ns:Parameters/ns:Parameter') as T2(Parm)
OUTER APPLY T2.Parm.nodes('./ns:Properties') AS T3(Props)
OUTER APPLY T3.Props.nodes('./ns:Property[@ns:Name="ID"]') AS T4(Id)
OUTER APPLY T3.Props.nodes('./ns:Property[@ns:Name="CreationName"]') AS T5(CreationName)
OUTER APPLY T3.Props.nodes('./ns:Property[@ns:Name="Description"]') AS T6([Description])
| Parameter | Id | CreationName | Description |
|----------------|----------------------------------------|--------------|-----------------------------------------------------|
| PackageVersion | {673faa65-53ec-483d-8af2-960987977177} | | The package version |
| Debug | {501b3d7c-f7ac-429b-bb2d-c314649d9c98} | | Determines whether the package is ran in debug mode |
我还没有看到 xml 与当前 postings 类似的文件。我尝试使用的文件是 Project.params SSIS 文件,如下所示:
<SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">
<SSIS:Parameter SSIS:Name="PackageVersion">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{673faa65-53ec-483d-8af2-960987977177}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName" />
<SSIS:Property SSIS:Name="Description">The package version</SSIS:Property>
<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">1.0.0</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
<SSIS:Parameter SSIS:Name="Debug">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{501b3d7c-f7ac-429b-bb2d-c314649d9c98}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName" />
<SSIS:Property SSIS:Name="Description">Determines whether the package is ran in debug mode</SSIS:Property>
<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">true</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">3</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
</SSIS:Parameters>
我尝试在此处关注 post:
;WITH rs (xmldata) AS
(
SELECT TRY_CAST(BulkColumn AS XML) AS BulkColumn
FROM OPENROWSET(BULK 'C:\Software\Project.params', SINGLE_BLOB) AS x
),cte AS
(
SELECT a.value('@Parameter', 'NVARCHAR(50)') AS Parameter
, c.value('@ID','NVARCHAR(50)') AS ID
, c.value('@CreationName','NVARCHAR(50)') AS CreationName
, c.value('@Description','NVARCHAR(100)') AS [Description]
, c.value('@IncludeInDebugDump','INT') AS IncludeInDebugDump
, c.value('@Required','INT') AS [Required]
, c.value('@Sensitive','INT') AS Sensitive
, c.value('@Value','NVARCHAR(10)') AS [Value]
, c.value('@DataType','INT') AS DataType
FROM rs AS tbl
CROSS APPLY tbl.xmldata.nodes('/Parameters') AS t1(a)
OUTER APPLY t1.a.nodes('/Parameter') AS t2(b)
OUTER APPLY t2.b.nodes('/Properties') AS t3(c)
OUTER APPLY t3.c.nodes('/Property') AS t4(d)
)
select * from cte
这运行成功(第一个 cte rs 正确提取数据)但第二个 cte returns 没有数据。没有错误,我得到了结果中的列,只是没有行。任何指导将不胜感激。
您需要在查询中指定名称空间,您需要根据属性值过滤节点,这很冗长,但这应该适合您,但您必须添加您需要的其余列需要。
MS SQL Server 2017 架构设置:
查询 1:
Declare @xmldata as xml =
'<SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">
<SSIS:Parameter SSIS:Name="PackageVersion">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{673faa65-53ec-483d-8af2-960987977177}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName" />
<SSIS:Property SSIS:Name="Description">The package version</SSIS:Property>
<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">1.0.0</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
<SSIS:Parameter SSIS:Name="Debug">
<SSIS:Properties>
<SSIS:Property SSIS:Name="ID">{501b3d7c-f7ac-429b-bb2d-c314649d9c98}</SSIS:Property>
<SSIS:Property SSIS:Name="CreationName" />
<SSIS:Property SSIS:Name="Description">Determines whether the package is ran in debug mode</SSIS:Property>
<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">true</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">3</SSIS:Property>
</SSIS:Properties>
</SSIS:Parameter>
</SSIS:Parameters>'
查询如下:
;WITH XMLNAMESPACES ('www.microsoft.com/SqlServer/SSIS' as ns),
RS AS
(
SELECT @xmldata as xmlData
)
SELECT Parm.value('@ns:Name', 'NVARCHAR(50)') AS Parameter,
Id.value('.', 'NVARCHAR(50)') AS Id,
CreationName.value('.', 'NVARCHAR(50)') AS CreationName,
[Description].value('.', 'NVARCHAR(100)') AS [Description]
FROM RS
CROSS APPLY xmlData.nodes('/ns:Parameters/ns:Parameter') as T2(Parm)
OUTER APPLY T2.Parm.nodes('./ns:Properties') AS T3(Props)
OUTER APPLY T3.Props.nodes('./ns:Property[@ns:Name="ID"]') AS T4(Id)
OUTER APPLY T3.Props.nodes('./ns:Property[@ns:Name="CreationName"]') AS T5(CreationName)
OUTER APPLY T3.Props.nodes('./ns:Property[@ns:Name="Description"]') AS T6([Description])
| Parameter | Id | CreationName | Description |
|----------------|----------------------------------------|--------------|-----------------------------------------------------|
| PackageVersion | {673faa65-53ec-483d-8af2-960987977177} | | The package version |
| Debug | {501b3d7c-f7ac-429b-bb2d-c314649d9c98} | | Determines whether the package is ran in debug mode |