【发布时间】:2026-01-15 01:20:11
【问题描述】:
我有一个 dataflow ,它是一个 SharePoint List Source 到 ADO.NET Database Destination 。在SSIS 2008 中,当我运行它时,我得到下面的错误。我已经浏览了我带来的 40 列,并检查了输入大小和数据库列的大小,它们看起来很好。需要注意的是,我正在使用备忘录字段来处理 ntext 数据类型。寻求的结果集是从 SharePoint List 导入的 600 行。我运行这个数据流,我得到下面的错误,在需要导入的 600 个数据库中,只有 200 个被写入数据库。
3 有趣的测试。
- 测试 1,将缓冲区大小增加到 3000 万,我现在得到 390 行 导入,然后我得到下面的错误。
- 测试 2,将值提高到 50 百万导致错误立即发生。我没摸过 批量大小为 2000。
- 测试 3,我取消了一些随机列的映射 在 SharePoint 列表源的中间,所有行现在都得到 已导入。
我不明白发生了什么。看来我遇到了某种内部限制,这是 SharePoint 适配器问题吗?
错误
Microsoft.SqlServer.Dts.Pipeline.DoesNotFitBufferException: The value is too large to fit in the column data area of the buffer.
at Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer.SetString(Int32 columnIndex, String value)
at Microsoft.Samples.SqlServer.SSIS.SharePointListAdapters.SharePointListSource.PrimeOutput(Int32 outputs, Int32[] outputIDs, PipelineBuffer[] buffers)
at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPrimeOutput(IDTSManagedComponentWrapper100 wrapper, Int32 outputs, Int32[] outputIDs, IDTSBuffer100[] buffers, IntPtr ppBufferWirePacket)
【问题讨论】:
-
我会尝试降低批量大小。还要检查数据源的高级属性,并查看您的备注字段在包数据流中被转换为什么 SSIS 数据类型。
-
科学方法在这里将成为您的朋友。改变一件事并进行测试。重复,直到您确定导致失败的原因。
-
您遇到的错误是缓冲区的填充(来自共享点适配器的内容)。您可以删除您的目的地并继续获得相同的结果。
-
正如@billinkc 所说,您的缓冲区内存不足。听起来您的 SSIS 服务器(或笔记本电脑)上的资源非常有限。您可以配置数据流属性 BufferTempStoragePath 为其提供一个溢出到磁盘的位置。我忘记了 ntext 是否被视为二进制文件,但您可能还需要考虑 BlobTempStoragePath。
-
我不知道这是管道内存不足的问题,就像试图将 5lbs 的数据塞入 1lb 的袋子中一样
标签: sql-server ssis sql-server-2008-r2