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

如何在Visual Studio SSIS包中用SQL Server表值赋值给变量

SSIS读取单列两行表值到两个变量的解决方案

方法一:用Execute SQL Task(推荐纯SSIS组件实现)

这种方法通过SQL查询将两行数据转换为单行两列,直接映射到两个变量,无需脚本。

  1. 编写转换查询
    执行以下SQL,把表中的两行转为两列(顺序无关,符合需求):

    SELECT 
        MAX(CASE WHEN rn = 1 THEN ThisIsMyColumnName END) AS VarValue1,
        MAX(CASE WHEN rn = 2 THEN ThisIsMyColumnName END) AS VarValue2
    FROM (
        -- 给每行加行号,无需特定排序
        SELECT ThisIsMyColumnName, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
        FROM YourTableName -- 替换为你的实际表名
    ) t
    
  2. 配置Execute SQL Task

    • 连接管理器选择对应SQL Server的连接
    • 切换到ResultSet选项,选择Single Row(因为查询返回单行)
    • 点击Result Set选项卡,添加两个映射:
      • 结果名称填VarValue1,变量选择User::MySQLValueOne
      • 结果名称填VarValue2,变量选择User::MySQLValueTwo
        如果用索引映射,0对应第一列,1对应第二列,也可以直接填0和1

方法二:用Script Task(灵活自定义逻辑)

如果需要更灵活的处理逻辑,可通过C#/VB脚本读取数据并赋值给变量。

  1. 配置Script Task

    • 在Control Flow中拖入Script Task,双击编辑
    • 在ReadOnlyVariables中添加存储SQL连接字符串的变量(比如User::DBConnectionString)
    • 在ReadWriteVariables中添加User::MySQLValueOne和User::MySQLValueTwo
    • 脚本语言选择C#(或VB)
  2. 编写脚本代码
    替换连接字符串变量名和表名后使用:

    using System.Data.SqlClient;
    using Microsoft.SqlServer.Dts.Runtime;
    
    public void Main()
    {
        string connStr = Dts.Variables["User::DBConnectionString"].Value.ToString();
        string val1 = string.Empty;
        string val2 = string.Empty;
    
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            conn.Open();
            string sql = "SELECT ThisIsMyColumnName FROM YourTableName";
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    int rowIndex = 0;
                    while (reader.Read())
                    {
                        if (rowIndex == 0)
                            val1 = reader["ThisIsMyColumnName"].ToString();
                        else if (rowIndex == 1)
                            val2 = reader["ThisIsMyColumnName"].ToString();
                        rowIndex++;
                    }
                }
            }
        }
    
        Dts.Variables["User::MySQLValueOne"].Value = val1;
        Dts.Variables["User::MySQLValueTwo"].Value = val2;
        Dts.TaskResult = (int)ScriptResults.Success;
    }
    

说明

你之前尝试的ForLoop容器默认每次循环会覆盖单个变量,无法同时存储两个值;普通Execute SQL返回多行时若用Full ResultSet,需要配合Foreach Loop,但同样只能逐行赋值,无法一次映射到两个变量。上述两种方法分别通过SQL转换或脚本读取,解决了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:47:04