【问题标题】:Copying data from one database to another using SSIS使用 SSIS 将数据从一个数据库复制到另一个数据库
【发布时间】:2017-07-14 11:46:28
【问题描述】:

我正在编写一个 SSIS 包并尝试将数据从一个数据库提取到另一个数据库。我创建了一个执行 SQL 任务并使用以下语句 INSERT INTO dbo.getParties EXEC dbo.getParties 来执行该操作。当源和目标我们在同一个数据库中时,这有效。当源和目标位于不同的数据库中时,我该如何处理。您只能将一个连接管理器与一个任务相关联。

我是否连接到源并在 SP 中调用目标。这是正确的做法吗

下面是我的模板设计

【问题讨论】:

    标签: sql-server ssis etl


    【解决方案1】:

    使用Data Flow 组件,您可以在其中设置源和目标连接字符串。

    ..在数据流任务中使用 DestinationSource 助手,让您为每个助手定义自己的连接字符串。

    当然,除了这些,您还可以应用您希望的任何类型的数据转换。

    编辑: 由于您的源是 SQL 命令(存储过程),因此您需要在 source 助手中定义它。正如您在此处看到的,只需将Data Access Mode 更改为SQL Command 并设置为EXEC getParties

    【讨论】:

    • 嗨 Ivan,在这种情况下我该如何处理 sql 语句,因为我当前的语句是 INSERT INTO dbo.getParties EXEC dbo.getParties
    • @Tom 我编辑了我的答案。基本上,您只需要设置正确的数据访问模式。您的源是存储过程 (EXEC getParties),目标是一个表。
    • 您的解决方案很好,但只想检查您如何处理增量插入。也就是说,如果我在目标中插入了 100 条记录,那么我不想再次插入相同的 100 条记录。我需要从 101 条记录开始插入
    • 之前的方法我在目标表上使用 select max 查询。我该怎么做呢
    • @Tom 你的意思是目标表中的主键?这取决于。如果它是身份列,那么你不应该担心它。但是,如果您只是想确保目标中是否已经存在相同的记录,那么您只需要添加一些逻辑。例如。在Data Flow 任务之前,您可以在Script Task 中决定是否继续。有很多选择,它只取决于您的架构、需求等。
    【解决方案2】:

    Execute SQL Task INSERT INTO 命令中,只需将数据库名称添加到表名称中。例如:

    INSERT INTO Db1.dbo.Table1
    SELECT * FROM Db2.dbo.Table2
    

    旁注:我认为最好使用 DataFlow Tasks 来复制数据,因为它更快并且提供更多的控制和错误处理

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多