如何使用SSIS传输数据

How to transfer data using SSIS

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

下面是我的数据流:

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

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

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

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

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

谢谢,

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

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

该错误意味着 PerformanceId 是您目的地 table 上的一个 IDENTITY 列。 IDENTITY 列是只读的,除非您另有说明。因此,如果我们在 tSQL 中能够插入 IDENTITY,我们将打开 IDENTITY_INSERT。因为您在 SSIS 中,所以您可以通过选中 "keep identity" 框来完成同样的事情。

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

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

列 PerformanceID(在目标中)几乎可以肯定是一个标识列,这就是它不起作用的原因。您可能不想传输它(并让 SQL 服务器为 PerformanceID 生成值,或者您可以检查 'Keep Identity.'