如何在Visual Studio SSIS包中用SQL Server表值赋值给变量
SSIS读取单列两行表值到两个变量的解决方案
方法一:用Execute SQL Task(推荐纯SSIS组件实现)
这种方法通过SQL查询将两行数据转换为单行两列,直接映射到两个变量,无需脚本。
编写转换查询
执行以下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配置Execute SQL Task
- 连接管理器选择对应SQL Server的连接
- 切换到
ResultSet选项,选择Single Row(因为查询返回单行) - 点击
Result Set选项卡,添加两个映射:- 结果名称填
VarValue1,变量选择User::MySQLValueOne - 结果名称填
VarValue2,变量选择User::MySQLValueTwo
如果用索引映射,0对应第一列,1对应第二列,也可以直接填0和1
- 结果名称填
方法二:用Script Task(灵活自定义逻辑)
如果需要更灵活的处理逻辑,可通过C#/VB脚本读取数据并赋值给变量。
配置Script Task
- 在Control Flow中拖入Script Task,双击编辑
- 在
ReadOnlyVariables中添加存储SQL连接字符串的变量(比如User::DBConnectionString) - 在
ReadWriteVariables中添加User::MySQLValueOne和User::MySQLValueTwo - 脚本语言选择C#(或VB)
编写脚本代码
替换连接字符串变量名和表名后使用: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
相关产品推荐
相关产品推荐

