You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSIS中通过Execute Process Task将Python输出映射到独立变量?

在SSIS中从Python脚本映射输出到多个独立用户变量的方法

现有临时方案说明

你当前采用的合并字符串再通过|分割的方法,在变量值不含分隔符的场景下是可行的,但存在结构不够清晰、若变量值包含|会导致解析失败的风险。

更结构化的解决方案:JSON输出+SSIS脚本任务解析

通过让Python输出JSON格式的结构化数据,再在SSIS中用脚本任务解析到独立变量,是更可靠的方法:

1. 修改Python脚本输出JSON

把原脚本改成输出标准JSON字符串,确保结构明确:

import json

if __name__ == "__main__":
    # 定义要输出的变量集合
    output_vars = {
        "user_ssis_variable1": "Let's",
        "user_ssis_variable2": "get",
        "user_ssis_variable3": "ready",
        "user_ssis_variable4": "to rumble!"
    }
    # 输出JSON字符串(确保无多余print,只输出这一行核心数据)
    print(json.dumps(output_vars))

2. SSIS端配置步骤

  • 保持Execute Process Task的配置,将Python的标准输出捕获到一个字符串变量(比如User::Python_Json_Output)
  • 添加一个Script Task:
    • 设置ReadOnlyVariables为User::Python_Json_Output
    • 设置ReadWriteVariables为User::user_ssis_variable1,User::user_ssis_variable2,User::user_ssis_variable3,User::user_ssis_variable4
    • 在脚本任务中编写解析代码(以C#为例):
      using System;
      using Microsoft.SqlServer.Dts.Runtime;
      using System.Text.Json;
      
      namespace ST_ScriptTaskJsonParser
      {
          [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
          public class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
          {
              public void Main()
              {
                  try
                  {
                      string jsonStr = Dts.Variables["User::Python_Json_Output"].Value.ToString();
                      var jsonDoc = JsonDocument.Parse(jsonStr);
                      var root = jsonDoc.RootElement;
      
                      // 将JSON中的值映射到对应SSIS变量
                      Dts.Variables["User::user_ssis_variable1"].Value = root.GetProperty("user_ssis_variable1").GetString();
                      Dts.Variables["User::user_ssis_variable2"].Value = root.GetProperty("user_ssis_variable2").GetString();
                      Dts.Variables["User::user_ssis_variable3"].Value = root.GetProperty("user_ssis_variable3").GetString();
                      Dts.Variables["User::user_ssis_variable4"].Value = root.GetProperty("user_ssis_variable4").GetString();
      
                      Dts.TaskResult = (int)ScriptResults.Success;
                  }
                  catch (Exception ex)
                  {
                      // 捕获异常并标记任务失败
                      Dts.Events.FireError(0, "JSON解析失败", ex.Message, string.Empty, 0);
                      Dts.TaskResult = (int)ScriptResults.Failure;
                  }
              }
      
              enum ScriptResults
              {
                  Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
                  Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
              };
          }
      }
      

方案对比与最优性确认

  • 如果你的变量值绝对不会包含分隔符|,且变量数量少,临时的分割方案是最简洁的,无需额外依赖和代码编写。
  • 如果变量值可能包含特殊字符、变量数量多或结构复杂,JSON解析的方法更健壮、易维护,是更优的结构化方案。

内容的提问来源于stack exchange,提问作者ashap551

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:33:10