如何使用SSIS传输数据

时间:2016-09-28 17:32:00

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

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

以下是我的数据流:

enter image description here

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

下面是OLE DB目的地,它有我想要传输数据的表(此表目前是空白的):

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

enter image description here

我是一个完整的新手,所以我希望得到一些关于我需要包含什么的指导,以便让这个SSIS包传输数据。我是否需要包含合并声明以及如何应用它。我听说你可以编写一个合并作为proc并在proc上调用sql命令。这是否意味着我需要在SSMS中编写一个proc,然后在OLE DB Destination中调用它?

如果有人可以提供示例和截图,那么这将非常有用,因为我是SSIS的新手。

谢谢,

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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