该值违反了列的完整性约束

use*_*167 38 ssis

我试图将数据从Excel文件导入SQL Server数据库.我无法这样做因为我在日志文件中遇到以下错误.请帮忙.日志错误如下: -

[OLE DB Destination [42]]错误:发生了OLE DB错误.错误代码:0x80040E21.OLE DB记录可用.来源:"Microsoft SQL Native Client"Hresult:0x80040E21说明:"多步OLE DB操作生成错误.检查每个OLE DB状态值,如果可用.没有工作.".

[OLE DB目标[42]]错误:输入"OLE DB目标输入"(55)的输入列"F2的复制"(5164)出错.返回的列状态为:"该值违反了列的完整性约束.".

[OLE DB目标[42]]错误:"输入"OLE DB目标输入"(55)"失败,因为发生错误代码0xC020907D,并且"输入"OLE DB目标输入"(55)"上的错误行处置指定失败出错了.指定组件的指定对象发生错误.

[DTS.Pipeline]错误:组件"OLE DB Destination"(42)上的ProcessInput方法失败,错误代码为0xC0209029.标识的组件从ProcessInput方法返回错误.该错误特定于组件,但错误是致命的,将导致数据流任务停止运行.

[DTS.Pipeline]错误:线程"WorkThread0"已退出,错误代码为0xC0209029.

[Excel Source [174]]错误:尝试向数据流任务缓冲区添加行失败,错误代码为0xC0047020.

[DTS.Pipeline]错误:组件"Excel Source"(174)上的PrimeOutput方法返回错误代码0xC02020C4.当管道引擎调用PrimeOutput()时,组件返回失败代码.失败代码的含义由组件定义,但错误是致命的,管道停止执行.

Fai*_*her 57

通常在取消选中Allow Nulls选项时发生.

解:

  1. 查看此错误/警告的列名称.
  2. 转到SSMS并找到该表
  3. 允许该列为空
  4. 保存表格
  5. 重新运行SSIS

尝试这些步骤.它对我有用.

看到这个链接


小智 27

在最后一行数据后从Excel中删除空行!

有时Excel中的空行仍被视为数据,因此尝试在具有一个或多个非可空列的表中导入它们会违反列的约束.

解决方案:选择工作表上的所有空行,即使是最后一行数据之后的空行,也可以单击"删除行".

显然,如果您的某些数据确实违反了表的任何约束,那么只需修复您的数据以匹配数据库的规则.


She*_*dan 9

作为@FazianMubasher的答案的一个简单替代NULL,您可以添加条件拆分任务来将NULL值分支到错误文件,或者只是忽略它们,而不是允许指定的列(可能由于许多原因而无法实现).

在此输入图像描述

在此输入图像描述


bil*_*nkc 7

就像"F2的副本"列中的错误消息"违反列的完整性约束的值"一样

使它不会违反目标表中的值.您的问题中没有提供允许值,数据类型等,因此我们无法更具体地回答.

为了解决这个问题,不,实际上就像它说的那样:你正在将一些东西放入一个不允许的列中.它可能是Faizan所指出的,你将一个NULL放入一个NOT NULLable列,但它可能是一大堆其他东西,因为原始的海报从未提供任何更新,我们只能猜测.是否存在插入违反的外键约束?也许有一个检查约束被吹?也许Excel中的源列具有Excel的有效日期值,该值对目标列的日期/时间数据类型无效.

因此,关注具体信息,最好的答案是"不做破坏它的事情"在这种情况下,关于"F2的副本"的东西对于目标列是不好的.给我们表定义,提供的值等,然后你可以得到具体的答案.

告诉人们将NOT NULLable列变为NULLable可能是正确的答案.它也可能是人类已知的最恐怖的答案.如果现有进程期望在"F2的副本"列中始终存在值,则将约束更改为NULL会对现有查询造成严重破坏.例如

SELECT * FROM ArbitraryTable AS T WHERE T.[Copy of F2] = '';
Run Code Online (Sandbox Code Playgroud)

目前,该查询检索新导入的所有内容,因为这Copy of F2是一个命名不佳的状态指示符.这些数据需要被输入下一个系统,因此...账单可以获得报酬.只要使得未处理的行可以具有NULL值,上述查询就不再满足该值.账单没有得到报酬,收藏回收你的建筑,现在你失业了,都是因为你没有进行影响分析等等.