【问题标题】:How to transfer data using SSIS如何使用 SSIS 传输数据
【发布时间】:2016-09-28 17:31:59
【问题描述】:

我是 SSIS 包的新手,只需要有关如何将数据从一个数据源传输到我自己的数据库的帮助。

下面是我的数据流:

现在我有一个 ODBC 源(Http_Requests 源),我从 PostgreSQL 数据库表中获取数据(有关表列和数据,请参见下面的屏幕截图):

下面是 OLE DB 目标,其中包含我要将数据传输到的表(该表当前为空白):

现在我尝试开始调试以提取数据,但出现一些错误(如下所示):

我是一个完全的新手,所以我想要一些关于我需要包含哪些内容的指导,以便让这个 SSIS 包传输数据。我是否需要包含合并语句以及如何应用它。我听说您可以将合并编写为 proc,然后将 proc 作为 sql 命令调用。这是否意味着我需要在 SSMS 中编写一个 proc,然后在 OLE DB Destination 中调用它?

如果有人可以提供示例和屏幕截图,那将非常有帮助,因为我是 SSIS 的新手。

谢谢,

【问题讨论】:

  • 您可以启用“延迟验证”为真
  • 尝试选中“保持身份”框。

标签: sql sql-server ssis sql-server-data-tools


【解决方案1】:

在运行前检查目标表的约束或禁用它们。 以下是您可以使用的查询。 -- 禁用所有表约束 ALTER TABLE YourTableName NOCHECK CONSTRAINT ALL -- 启用所有表约束 ALTER TABLE YourTableName 检查所有约束

【讨论】:

    【解决方案2】:

    勾选保持身份 框或删除表上的主键。应用更改后,不要忘记通过在 sis 中打开映射来刷新元数据。

    【讨论】:

      【解决方案3】:

      错误意味着 PerformanceId 是目标表上的 IDENTITY 列。 IDENTITY 列是只读的,除非您另有说明。因此,如果我们在 tSQL 中能够插入 IDENTITY,我们将打开 IDENTITY_INSERT。因为您在 SSIS 中,所以您可以通过选中“保持身份”框来完成同样的事情。

      但是当您遇到这样的错误时,通常表明您不应该将 ID 映射到 Performance ID。您要问的问题是来自源的身份应该是目标表的身份吗?通常不会,大多数时候它将是另一列作为代理键。然后你必须了解它是否可能。因为如果存在唯一约束或主键,则标识不能重复,这意味着您必须知道源的 id 列不会导致重复的主键违规。

      如果您从源中取消选中 ID 并忽略该值,则很可能是实际修复。

      【讨论】:

        【解决方案4】:

        PerformanceID 列(在目标中)几乎可以肯定是一个标识列,这就是它不起作用的原因。您可能不想传输它(并让 SQL Server 为 PerformanceID 生成值,或者您可以检查“保留身份”。

        【讨论】:

          猜你喜欢
          • 2019-02-25
          • 1970-01-01
          • 1970-01-01
          • 2016-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-24
          相关资源
          最近更新 更多