SSIS中DT_NTEXT字段经脚本组件后无法写入的4000字符限制问题
解决SSIS脚本组件中DT_NTEXT列只读无法写入的问题
我之前在处理SSIS包捕获文件元数据时,也碰到过原输入列变成只读没法修改的情况,给你几个实用的解决办法:
方法1:修改输入列的使用类型(最直接)
脚本组件默认会把输入列设为只读,你需要手动调整它的属性:
- 打开脚本组件编辑器,切换到「输入列」选项卡
- 找到你的DT_NTEXT类型的JSON列,把「Usage Type」从
ReadOnly改成ReadWrite - 点击确定后,回到脚本代码里,就可以直接对该列进行赋值操作了(比如要保留原内容的话,直接
Row.JsonContent = Row.JsonContent;就行)
方法2:新增输出列而非修改原列(更推荐)
其实你只是要添加文件名、目录路径这类额外数据,完全不需要修改原JSON列:
- 在脚本组件编辑器的「输入和输出」选项卡中,展开「输出0」,点击「添加列」
- 新增两个列,比如
FileName(类型设为DT_WSTR,长度根据实际路径调整)和FileDirectory(同类型) - 在脚本代码里,只需要给这两个新列赋值,原DT_NTEXT列保持
ReadOnly状态,会自动向下传递,这样既简单又不会破坏原数据的流向
脚本代码里的注意事项
如果用方法1修改了原列,要注意SSIS中DT_NTEXT对应的.NET类型是string,所以在C#脚本里直接用字符串操作就行,比如:
// 保留原JSON内容的同时,处理其他逻辑 Row.JsonContent = Row.JsonContent; // 给新增的文件名列赋值(示例:通过Path类获取文件名) Row.FileName = System.IO.Path.GetFileName(Row.FilePath);
另外要确保平面文件源的DT_NTEXT列配置正确,避免出现数据截断的情况——你之前已经设置了DT_NTEXT,这一步没问题,但要注意平面文件连接管理器里的「文本限定符」不要误选,否则可能会破坏JSON结构。
内容的提问来源于stack exchange,提问作者AlanPear
相关产品推荐
相关产品推荐

