Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RhinoETL-连接两个表作为输入,在输出时写入两个表_C#_Sql_Rhino_Rhino Etl - Fatal编程技术网

C# RhinoETL-连接两个表作为输入,在输出时写入两个表

C# RhinoETL-连接两个表作为输入,在输出时写入两个表,c#,sql,rhino,rhino-etl,C#,Sql,Rhino,Rhino Etl,我正在用c语言编写一个ETL作业,使用Rhino ETL 我在服务器a上有一个数据库。这有两个表: 范例 T领主 订单编号 客户名称 客户邮箱地址 转移 特伯洛德林 订单编号 产品ID 产品名称 价格 在ServerB上,它有一个相同的表,订单从Web传输到我们的后端系统 使用RhinoETL,我的InputCommandOperation当前看起来像: class ReadOrdersFromWebDB : InputCommandOperation { public ReadOrde

我正在用c语言编写一个ETL作业,使用Rhino ETL

我在服务器a上有一个数据库。这有两个表:

范例

T领主

订单编号 客户名称 客户邮箱地址 转移 特伯洛德林

订单编号 产品ID 产品名称 价格 在ServerB上,它有一个相同的表,订单从Web传输到我们的后端系统

使用RhinoETL,我的InputCommandOperation当前看起来像:

class ReadOrdersFromWebDB : InputCommandOperation
{
    public ReadOrdersFromServerA(ConnectionStringSettings connectionStringSettings)
        : base(connectionStringSettings) { }

    protected override Row CreateRowFromReader(IDataReader reader)
    {
        return Row.FromReader(reader);
    }

    protected override void PrepareCommand(IDbCommand cmd)
    {
        cmd.CommandText = "SELECT TOP 10 * FROM tblOrders WHERE Transferred = 0";
    }
}
由于在此阶段没有要执行的转换,我的OutputCommandOperation将如下所示:

class WriteOrdersToServerB : OutputCommandOperation
{
    protected override void PrepareCommand(IDbCommand cmd, Row row)
    {
        cmd.CommandText =
@"INSERT INTO etc...........";
    }
}
我想做的是修改这个过程,同时从ServerA获取tblOrderLine详细信息——如果可能的话,不需要对db连接进行秒查询 我希望避免在tblOrderLine表上有一个已传输的列,并希望修改InputCommand以包含join

在InputCommand中加入联接后,插入操作如何工作?
这可能吗?

我的理解是,您有两个表希望从ServerA上载到ServerB,如果可能,可以将ServerA中的两个表合并在一起,然后在ServerB中将它们再次拆分为两个表

如果tblOrder和tblOrderLine之间的关系是1对多,那么简单地忘记加入它们。它将创建冗余数据,更不用说选择TOP n将导致tblOrderLine中的某些项目被忽略。如果这两个表之间的关系是1:1,那么这是可能的,但我不确定这是否比单独查询这两个表更有效

您可以通过将从tblOrder提取的OrderID保存到列表中,然后查询tblOrderLine中的特定OrderID来避免在tblOrderLine上使用Transfer标志

SELECT TOP 10 * 
FROM tblOrder
WHERE Transferred = 0
保存在此数据中找到的OrderID列表,并使用它查询tblOrderLine

SELECT *
FROM tblOrderLine
WHERE OrderID IN /* list of saved OrderID */