Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Sql server SSIS-使用ODBC SQL执行任务,将参数导入要导入的结果集_Sql Server_Ssis_Etl_Intersystems - Fatal编程技术网

Sql server SSIS-使用ODBC SQL执行任务,将参数导入要导入的结果集

Sql server SSIS-使用ODBC SQL执行任务,将参数导入要导入的结果集,sql-server,ssis,etl,intersystems,Sql Server,Ssis,Etl,Intersystems,第一件事。我对SSIS完全是新手,试图在ETL方面挖掘它的潜力,并最终进入SSAS。我有以下情况: 我有一个系统间数据库,可以通过ADO.NET 我想从这个数据库中获取数据,并通过增量加载将其插入MS SQL 我建议的解决方案/目标是: 在MS SQL中具有存储上次指针读取或日期/时间快照的表。(在现阶段没有)。让我们保持简单,假设我们将使用Intersystems数据库中存在的记录ID 从该表中获取指针,并通过ODBC将其用作参数来读取源数据库,然后将其插入到目标MS SQL db中 用上次读

第一件事。我对SSIS完全是新手,试图在ETL方面挖掘它的潜力,并最终进入SSAS。我有以下情况:

  • 我有一个系统间数据库,可以通过ADO
    .NET
  • 我想从这个数据库中获取数据,并通过增量加载将其插入MS SQL
  • 我建议的解决方案/目标是:

  • 在MS SQL中具有存储上次指针读取或日期/时间快照的表。(在现阶段没有)。让我们保持简单,假设我们将使用Intersystems数据库中存在的记录ID
  • 从该表中获取指针,并通过ODBC将其用作参数来读取源数据库,然后将其插入到目标MS SQL db中
  • 用上次读取的记录更新指针,以便下次继续。(我不想卷入更新/删除的复杂问题。让我们保持简单)
  • 迄今取得的进展:

  • 我成功地与MS SQL建立了连接,从那里读取指针并将其放入变量中
  • 我已经设法使用
    [Execute SQL task]
    使用参数从Intersystems Db读取数据,并使用
    FullResultSet将其放入变量中
  • 我已经设法使用
    [ForEach循环容器]
    使用
    [ForEach ADO枚举器]
    来遍历每个记录和每个字段(Yeeey!)
  • 现在。我可以使用一个
    [Script task]
    ,它使用
    VB.NET
    代码(理论上)插入MS SQL数据库,然后用从源数据库读取的最后一条记录更新计数器。我花了无数时间寻找使用ODBC参数的解决方案,以上是我能看到的唯一可行的方法

    我的问题是:

    这是唯一的方法和最佳实践吗?是否有一些简单的方法可以将这个结果集插入到一些数据流组件中,这些组件可以为我插入和更新记录指针???

    请假设我没有写入Intersystems Db的权限,因此我无法对表结构进行任何更改。但我只能读取数据,以便将其放入MS SQL中


    我建议你们使用数据流来提高设计的效率(批量加载与脚本中的逐行加载相比)和易用性(无需脚本编写)

  • 您应该使用execute SQL获取指针并将其保存到变量中
  • 您应该使用动态sql和上述变量构建sql变量
  • 在管理器中建立到源的数据连接
  • 添加一个数据流并进入其中
  • 添加源管理器并从弹出窗口中选择源
  • 从变量中选择sql并选择您的变量
  • 此时,您应该拥有所需的所有数据,并且可以继续转换或直接加载到目标

    编辑:记录指针部分

  • 添加一个多播(这将创建您想要的任意多个副本)
  • 添加聚合对象和最大值(无论指针是什么)
  • OleDBSQL对象(允许实时SQL,主要用于更新
  • 9a.更新“YourPointerTable”设置“DB中的PointerField”=?(?实际上是您需要输入的内容

    9b.映射到步骤8中命名的任何对象

    这将允许您处理插入/更新

  • 从多播流将新流映射到查找对象,并将您的键映射到目标表的键
  • 指定不匹配项以重定向到不匹配输出
  • 您的匹配映射到更新
  • 您的不匹配映射到插入

  • 您应该使用数据流,而不是将sql执行到变量中,并在foreach中逐行处理。我将在下面的回答中展开您正在寻找的KeithL—“我建议使用数据流来改进您的设计”。这是我第一次尝试。但我发现数据流中的ODBC数据源不支持参数。没有选项,如果您输入?则在“解析”sql查询时会出现错误。这就是我选择“执行sql任务”获取数据的原因,因为它是唯一支持参数的选项。