我有一个类似下面的标量函数
CREATE FUNCTION Logging.ParentDataSourceStatus
(
@ParentDataSourceKey INT
)
RETURNS XML
AS
BEGIN
DECLARE
@Xml XML
SET
@Xml = (
SELECT
ExecutionStatus.ExecutionStatus
, ParentDataSourceSummary.TotalErrorRows
FROM
Logging.ParentDataSourceSummary
JOIN Logging.ExecutionStatus
ON ParentDataSourceSummary.ParentDataSourceStatus = ExecutionStatus.ExecutionStatusCode
WHERE
ParentDataSourceSummary.ParentDataSourceKey = @ParentDataSourceKey
FOR XML PATH (''), ROOT ('ParentDataSourceStatus')
)
RETURN @Xml
END
当我在SSMS中查询时返回以下XML
<ParentDataSourceStatus>
<ExecutionStatus>Complete</ExecutionStatus>
<TotalErrorRows>0</TotalErrorRows>
</ParentDataSourceStatus>
我在SSIS包中的执行SQL任务中使用此函数,使用XML作为返回结果集,通过ADO.NET连接使用语句:
SELECT Logging.ParentDataSourceStatus(1614)
返回的结果存储在object类型的变量中。当我在脚本任务中读取此变量时:
XmlDocument xml = (XmlDocument)Dts.Variables["User::ParentDataSourceStatus"].Value;
调试器显示InnerXml如下:
<ROOT>
<ParentDataSourceStatus>
<ExecutionStatus>Complete</ExecutionStatus>
<TotalErrorRows>0</TotalErrorRows>
</ParentDataSourceStatus>
</ROOT>
我已经在函数中命名了根元素,所以在哪里添加<ROOT>
我可以摆脱它吗?
答案 0 :(得分:1)
当从执行SQL任务返回XML结果集时,它似乎将结果添加到<ROOT></ROOT>
节点。
没有选项可以禁用此功能,并且必须进一步操作XML中返回的结果以将其删除。
答案 1 :(得分:0)
使用replace来处理您要遵循的代码:
string content = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + Dts.Variables["User::DataXML"].Value.ToString().Replace("<ROOT>", "").Replace("</ROOT>", "");
(我也在乞求中添加xml文件并对其进行编码)