我想知道是否有办法通过在每一行上运行select来更新数据流任务中的列?
以下是这种情况:
让我们把它作为我们的起始位置。我从2个文件中收集信息,然后合并它们,然后我添加了一个带有派生列工具的列。有没有办法通过使用行的值在每一行上执行选择来填充此列?
前:
SELECT Count(*) AS cnt
FROM TABLE T
WHERE T.COLUMN1 = ROW.COLUMN3
AND T.COLUMN2 = ROW.COLUMN5
我不知道我是不是没有正确地说出我的需要,但我无法获得任何结果
谢谢
答案 0 :(得分:1)
您应该可以使用查找转换来执行此操作。
根据评论编辑:
如果由于表的大小而不想使用查找,则可以使用脚本组件完全执行所需操作。您可以为数据流的每一行创建和执行SQL命令,就像在任何.net应用程序中一样。
答案 1 :(得分:1)
我能够使用脚本组件
1-我已删除派生列
2-我创建了一个字符串变量,我在其中存储了一个通配符字符串,以替换我需要从该行获取的每个值。
3-我已经传递了这个变量allong,其中一个包含连接字符串信息到脚本组件
4-我已经在脚本组件的输出列中添加了一个新列
5-添加using System.Data.OleDb;
6-创建了2个变量:
string jourFerieQuery;
string dbcsoledbschema;
7-更新了PostExecute()以将我的SSIS变量的值放入脚本变量中:
public override void PostExecute()
{
base.PostExecute();
jourFerieQuery = Variables.jourFerieQuery;
dbcsoledbschema = Variables.dbcsoledbschema;
}
8-增加了一种方法:
int GetData(string cs, string query)
{
OleDbConnection conn = new OleDbConnection(cs);
conn.Open();
OleDbCommand cmd = new OleDbCommand(query, conn);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
conn.Close();
return (int)dt.Rows[0][0];
}
9-更新了Input0_ProcessInputRow(Input0Buffer Row):
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string query = jourFerieQuery.Replace("[1]", Row.CODDEVI).Replace("[2]", Row.DATCRBEZEROCONGE.ToString());
Row.Keep = GetData(dbcsoledbschema, query);
}
我的查询返回一个计数,这就是我添加的方法返回int的原因
答案 2 :(得分:1)
您可以通过脚本组件(转换)来实现。
添加Ct。
的输出我使用System.Data.OleDB,因为它匹配SSIS包连接字符串。