【问题标题】:SSIS Error: Update Records with stored procedureSSIS 错误:使用存储过程更新记录
【发布时间】:2021-07-16 15:07:10
【问题描述】:

我有一个 SSIS 工作流,我在其中填充了一个 SQL Server 表(260 个数据行)。在这个 SSIS 工作流中,我还实现了一个查找来检查原始行是否已更改。如果是这样,它应该通过存储过程在 SQL Server 表中更新它。

这是我的存储过程:

ALTER PROCEDURE [dbo].[Update_MC_Countries] 
    @alphacode3char NVARCHAR(10),
    @alphacode NVARCHAR(10),
    @numcode NVARCHAR(10),
    @german NVARCHAR(150),
    @english NVARCHAR(150),
    @region NVARCHAR(10),
    @qmr NVARCHAR(10)
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE [dbo].[MasterData_EDL_MC_Countries]
    SET [alphacode3char] = @alphacode3char,
        [alphacode] = @alphacode,
        [numcode] = @numcode,
        [german] = @german,
        [english] = @english,
        [region] = @region,
        [qmr] = @qmr

我收到此错误:

OLE DB 记录可用。
来源:“Microsoft SQL Server Native Client 11.0”
结果:0x80040E2F
说明:“违反 PRIMARY KEY 约束 'PK_MasterData_EDL_MC_Countries'。无法在对象 'dbo.MasterData_EDL_MC_Countries' 中插入重复键。重复键值为 (DEU)。”。

为什么代码要插入这一行而不是更新它?

我不明白。任何帮助表示赞赏!

【问题讨论】:

  • 你的更新语句中真的没有 WHERE 条件吗?
  • no where 子句会将每一行更新为相同的内容
  • 感谢两位。缺少 where 子句!
  • 此名称 @alphacode3char 与数据类型 NVARCHAR(10) 相矛盾。您的代码绝不应该撒谎或误导。

标签: sql-server ssis sql-update


【解决方案1】:

如果没有看到正在更新的数据集就很难判断,但是当已经有一行作为其主键时,也许您正在更新一行?我会质疑您为什么还要更新唯一密钥,这将是 PK 冲突。你能展示一下表格定义吗?

【讨论】:

  • 嗨@Mike,我的存储过程中缺少 where 子句。您提示为什么更新唯一键很有帮助。在我的情况下,密钥将永远不会更新,因为之前的查找已经插入了新密钥。但无论如何我已经从更新语句中删除了主键,因为它是多余的!谢谢!
  • @Stelios 是的,您的问题不清楚您显示的 SQL 是否是整个查询。很高兴你把它整理好了。
猜你喜欢
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
相关资源
最近更新 更多