SSIS更新列的结果是sql select
我想知道是否有更新数据流任务中的列的方法,通过在每一行上运行select?SSIS更新列的结果是sql select
这里的情况:
让我们把这个作为我们的起始位置。我从2个文件收集信息,然后合并它们,然后使用派生列工具添加一列。有没有办法通过使用行的值在每一行上执行选择来填充此列?
例:
SELECT Count(*) AS cnt
FROM TABLE T
WHERE T.COLUMN1 = ROW.COLUMN3
AND T.COLUMN2 = ROW.COLUMN5
我不知道,如果我只是不正确措辞我的需要,但我不能得到任何结果
谢谢
你应该能够使用查找转换来完成此操作。
编辑基于评论:
如果你不想使用查找由于表的大小,你可以做的正是你想用一个脚本组件是什么。您可以为数据流的每一行创建和执行SQL命令,就像在任何.net应用程序中一样。
我能够用脚本组件做
1 - 我已经删除了派生列
2 - 我已经创建了一个字符串变量来存放各种查询用通配符字符串替换我需要从该行获取的每个值。
3-我已经通过了这个变量与含有connecection串信息,以脚本组件
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行):
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
看起来您已详细了解我的答案!做得好。 – KeithL
它总是有助于获得细节 –
您可以通过脚本组件(转换)来实现。
添加Ct的输出。
我使用System.Data.OleDB,因为它与SSIS包连接字符串相匹配。
我无法做到这一点,因为查询随着每一行而改变,我不想加载完整的表格,因为它很大。但是,如果可能的话,我有兴趣看到如何 –
谢谢,这就是我最终做的。我列出了我已发布的解决方案中的步骤 –