症状
假设你在 Microsoft SQL Server 2012 Integration Services (SSIS 2012)或 SQL Server 2014 Integration Services (SSIS 2014)程序包中使用了具有大量批处理的 Data Quality Services (DQS)清理组件。 当你尝试执行程序包时,你可能会收到以下结果:
-
在 SSIS 包中收到以下错误
OnError,<MachineName>,<用户名>,数据流任务通过 DQS 传递数据,{9C749B1D-3FAF-4E3B-B0B9-C8BA626428F5},{B8582806-2FDB-43EF-8E69-B43E6A375DD2},<日期 ><时间>,< 日期><时间 >,0,0x,值 "<StringValue>" 列 <ColumnName>"不适合当前缓冲区。 值长度为11,但输出列长度为1。 OnError,<MachineName>,<UserNname>,DQS_Test,{AF400590-A48A-4483-87A0-A5CC5AC8BF09},{B8582806-2FDB-43EF-8E69-B43E6A375DD2},<日期><时间>,<日期><时间>,0,0X,列<ColumnName>中的值 "<StringValue>" 不适合当前缓冲区。 值长度为11,但输出列长度为1。 OnError,<MachineName>,<用户名>,数据流任务-通过 DQS 传递数据,{9C749B1D-3FAF-4E3B-B0B9-C8BA626428F5},{B8582806-2FDB-43EF-8E69-B43E6A375DD2},<日期 ><时间>,<日期>< 时间 >,0,0x,在 DQS 基础结构中发生意外错误。DoesNotFitBufferException:值太大,缓冲区的列数据区域中容纳不下该数据。 在 Microsoft SqlServer. Dts。 PipelineBuffer SetString (Int32 columnIndex,字符串值)。(ComponentUtility IDTSComponentMetaData100、ComponentMetadata buffer、Int32 PipelineBuffer、DataType type、Int32 长度、String columnName、对象值)。 fieldIndex (Ssdqs "1 DataCorrection,DataCorrectionComponent" 1 记录,ProcessChunk& ReadOnlyCollection))中
-
完成程序包后,请打开 DQS 客户端中生成的项目,并检查其中一个域。 如果按值对域进行排序,则可能会看到其他域中的值。
注意 此问题的失败率取决于批处理大小。 当批的大小较大时,故障率将会更大。
解决方案
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 2012 SP2 的累积更新1 /en-us/help/2976982
SQL Server 2014 的累积更新2 /en-us/help/2967546
SQL Server 2012 SP1 的累积更新10 /en-us/help/2954099
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
解决方法
若要解决此问题,请减小批处理大小以解决或缓解此问题。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。