【问题标题】:SSIS script task - Read from XML file, match text with system variable and output value to user variableSSIS 脚本任务 - 从 XML 文件中读取,将文本与系统变量匹配并将值输出到用户变量
【发布时间】:2016-10-28 13:32:59
【问题描述】:

我是 SSIS 新手,正在为脚本任务苦苦挣扎。试图弄清楚如何为以下场景构建脚本。

这里是场景

我的 XML 文件有以下数据

<?xml version="1.0" encoding="utf-8"?> 
<environments>   
<environment>  
<name>DEV3WEB</name> 
<databaseservername>DEV3DB.apc.com</databaseservername
<webservername>DEV3WEB.abc.com/</webservername>
<appservername>DEV3APP.abc.com</appservername>
</environment>
<environment>   
<name>DEV3APP</name>
<databaseservername>DEV3DB.abc.com</databaseservername
<webservername>DEV3WEB.abc.com/</webservername
<appservername>DEV3APP.abc.com</appservername>
</environment>
</environments>

**我希望脚本任务从 XML 文件中读取“名称” - 与系统变量“机器名称”匹​​配并将输出写入用户变量“服务器编号”。

如果机器名称是 DEV3WEB - 输出将是数字“1”,DEV3APP 输出将是数字“2”。**

提前致谢。

【问题讨论】:

  • 您的 XML 在多个地方无效(缺少关闭 &gt;)...

标签: sql-server xml ssis plsqldeveloper script-task


【解决方案1】:

你可以这样阅读信息:

  • 首先使用 all &lt;environment&gt;-nodes 创建一个 CTE
  • 在简单的SELECT 中使用派生表和普通的WHERE-子句

试试这样:

DECLARE @xml XML='<environments>
  <environment>
    <name>DEV3WEB</name>
    <databaseservername>DEV3DB.apc.com</databaseservername>
    <webservername>DEV3WEB.abc.com/</webservername>
    <appservername>DEV3APP.abc.com</appservername>
  </environment>
  <environment>
    <name>DEV3APP</name>
    <databaseservername>DEV3DB.abc.com</databaseservername>
    <webservername>DEV3WEB.abc.com/</webservername>
    <appservername>DEV3APP.abc.com</appservername>
  </environment>
</environments>';

DECLARE @MachineName NVARCHAR(MAX)=N'DEV3APP';
WITH AllEnvironments AS
(
    select env.value('name[1]','nvarchar(max)') AS Environment_Name
          ,env.value('databaseservername[1]','nvarchar(max)') AS Environment_DatabaseServername
          ,env.value('webservername[1]','nvarchar(max)') AS Environment_WebServername
          ,env.value('appservername[1]','nvarchar(max)') AS Environment_AppServername
    FROM @xml.nodes(N'environments/environment') AS A(env)
)
SELECT *
FROM AllEnvironments
WHERE Environment_Name=@MachineName;

对于更大的 XML,将过滤器设置为XQuery 以减少那里的工作量会更快(查看.nodes()-函数):

DECLARE @MachineName NVARCHAR(MAX)=N'DEV3APP';
SELECT   env.value('name[1]','nvarchar(max)') AS Environment_Name
        ,env.value('databaseservername[1]','nvarchar(max)') AS Environment_DatabaseServername
        ,env.value('webservername[1]','nvarchar(max)') AS Environment_WebServername
        ,env.value('appservername[1]','nvarchar(max)') AS Environment_AppServername
FROM @xml.nodes(N'environments/environment[name=sql:variable("@MachineName")]') AS A(env)

【讨论】:

  • 您好,感谢您的帮助和关注。情况是我没有在 Web 和 App 服务器中安装 SQL。我必须远程部署包。是否可以在 SSIS 中使用脚本任务?
  • @M.Mehta,对不起。不知道这个...没有这方面的经验...祝你好运!
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
相关资源
最近更新 更多