Java Talend大数据tMSSQLBulkExec批量更新返回标识列';PK#U列';包含无效的增量

Java Talend大数据tMSSQLBulkExec批量更新返回标识列';PK#U列';包含无效的增量,java,sql-server,talend,Java,Sql Server,Talend,我正在开发一个ETL流程,该流程将新数据插入到SQL Server数据库的维度表中,并将已更改的数据从暂存表更新到维度表中 我在SQL Server中设置了该表,使其如下所示: CREATE TABLE [schema].[dim_learning_activity]( [dim_learning_activity_id] [bigint] IDENTITY(1,1) NOT NULL, [activity_fk] [bigint] NOT NULL, [name] [n

我正在开发一个ETL流程,该流程将新数据插入到SQL Server数据库的维度表中,并将已更改的数据从暂存表更新到维度表中

我在SQL Server中设置了该表,使其如下所示:

CREATE TABLE [schema].[dim_learning_activity](
    [dim_learning_activity_id] [bigint] IDENTITY(1,1) NOT NULL,
    [activity_fk] [bigint] NOT NULL,
    [name] [nvarchar](500) NOT NULL,
    [code] [nvarchar](500) NULL,
    [description] [nvarchar](500) NULL,
    [label] [nvarchar](500) NULL,
    [date_last_update] [date] NULL,
    [start_date] [date] NULL,
    [end_date] [date] NULL,
    [active] [int] NULL,
    [est_cred_hours] [float] NULL,
    [ConType_Name] [nvarchar](500) NULL,
    [Txt1] [nvarchar](500) NULL,
    [TechnicalCourse] [nvarchar](500) NULL,
    [TechnicalCourseCategory] [nvarchar](500) NULL,
    [CreationDt] [date] NULL,
 CONSTRAINT [PK_dim_learning_activity_id] PRIMARY KEY CLUSTERED 
(
    [dim_learning_activity_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [IX_dim_learning_activity] UNIQUE NONCLUSTERED 
(
    [activity_fk] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
在此处可以看到dim\u learning\u activity\u id是主键

以下是我目前在Talend中的设置:

Talend输出的文件格式正确(列由“%”分隔,行由“\n”分隔):

这相当于:

dim_learning_activity_id = 5458
activity_fk = 108129
name = Learning Item Name
code = 108129
description = null
label = Curriculum
date_last_update = 2018-05-11
start_date = null
end_date = null
active = 1
est_cred_hours = 0.5
ConType_Name = Products (Technical Content)
Txt1 = Technical
TechnicalCourse = Technical
TechnicalCourseCategory = Delta
CreationDt = 2018-05-11
该记录已在维度表中,但如果选择了批量更新选项,则不会使用Talend tMSSQLBulkExec进行更新

我尝试过完全擦除表并从头开始使用它,但仍然收到此错误,即使是在新运行的作业中,当表为空且它所做的只是插入时,更新错误也会以相同的错误消失

我还尝试过更新activity_fk(记录ID系统),这会导致相同的错误


如果有更多信息需要帮助,请告诉我。

未显示全部工作内容。您是否有一个
tMSSQLConnection
?是的,在插入或更新LMS活动维度子对象的正上方有一个tMSSQLConnection。它指向了正确的服务器,并且很好地完成了插入。此外,插入后的tMSSQLCommit组件未设置为关闭连接,但如果我理解正确,更新后的tMSSQLCommit将设置为关闭连接(它只是在失败之前没有连接到该组件)。所有的主题都应该在一次交易中处理?你能解释一下你的意思吗?我的与此有什么不同?我有一个“MSSQLSconnection”在开头,它打开数据库用于创建大容量文件的查询,一个“MSSQLSCOMMIT”在“insert”子对象之后,“MSSQLSCOMMIT”在“update”子对象之后带有“Close Connection”。FTP只是将大容量文件移动到MSSQL服务器,以便服务器可以读取它。t_连接将创建一个连接并打开一个全局事务。如果以迭代方式提交,则需要禁用自动提交。请注意,如果需要将每条语句作为单个事务提交,则必须使用连接组件中提供的自动提交功能
dim_learning_activity_id = 5458
activity_fk = 108129
name = Learning Item Name
code = 108129
description = null
label = Curriculum
date_last_update = 2018-05-11
start_date = null
end_date = null
active = 1
est_cred_hours = 0.5
ConType_Name = Products (Technical Content)
Txt1 = Technical
TechnicalCourse = Technical
TechnicalCourseCategory = Delta
CreationDt = 2018-05-11