0
我收到一个Unicode文本平面文件,其中一列是单个固定长度值,另一列包含由垂直管道'|'分隔的列表值。第二列的长度和它包含的分隔值的数量会有很大的不同。在某些情况下,该列最多可以包含50000个字符,并且可以包含千个或更多的分隔值。SSIS:如何将NTEXT输入转换为字符串以在脚本组件中执行拆分功能?
输入文件示例:
[ObjectGUID]; [member]
{BD3481AF8-2CDG-42E2-BA93-73952AFB41F3}; CN=rGlynn SrechrshiresonIII,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp
{AC365A4F8-2CDG-42E2-BA33-73933AFB41F3}; CN=reeghler Johnson,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp|CN=rCoefler Cellins,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp|CN=rDasije M. Delmogeroo,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp|CN=rCurry T. Carrollton,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp|CN=yMica Macintosh,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp
我的想法是在此列进行拆分操作,并为每个值创建一个新的行。我正在尝试使用脚本组件来执行拆分。
分隔列的宽度很容易超过DT-WSTR的4000个字符限制,因此我选择了NTEXT作为数据类型。这提出了问题,因为我熟悉的.Split方法需要一个字符串。我试图将NTEXT转换为脚本组件中的字符串。
这里是我的代码:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
var stringMember = Row.member.ToString();
var groupMembers = stringMember.Split('|');
foreach (var groupMember in groupMembers)
{
this.Output0Buffer.AddRow();
this.Output0Buffer.objectGUID = Row.objectGUID;
this.Output0Buffer.member = groupMember;
}
}
我试图让会是这样的输出:
[ObjectGUID] [member]
{BD3481AF8-2CDG-42E2-BA93-73952AFB41F3} CN=rGlynn SrechrshiresonIII,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp
{AC365A4F8-2CDG-42E2-BA33-73933AFB41F3} CN=reeghler Johnson,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp
{AC365A4F8-2CDG-42E2-BA33-73933AFB41F3} CN=rCoefler Cellins,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp
{AC365A4F8-2CDG-42E2-BA33-73933AFB41F3} CN=rDasije M. Delmogeroo,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp
{AC365A4F8-2CDG-42E2-BA33-73933AFB41F3} CN=rCurry T. Carrollton,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp
{AC365A4F8-2CDG-42E2-BA33-73933AFB41F3} CN=yMica Macintosh,OU=Users,OU=PRV,OU=LOL,DC=ent,DC=keke,DC=cqb,DC=corp
但是我其实得到的是这样的:
[ObjectGUID] [member]
{BD3481AF8-2CDG-42E2-BA93-73952AFB41F3} Microsoft.SqlServer.Dts.Pipeline.BlobColumn
{AC365A4F8-2CDG-42E2-BA33-73933AFB41F3} Microsoft.SqlServer.Dts.Pipeline.BlobColumn
我可能会b做错了吗?
未来版本的SQL Server中将删除'ntext','text'和'image'数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前正在使用它们的应用程序。改为使用'nvarchar(max)','varchar(max)'和'varbinary(max)'。 [请参阅此处](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –
数据的来源是一个文本文件。单独分隔的成员的最终目标将是一个varchar(256)列。但是,我需要一个数据类型用于文本处理。我选择了NTEXT,因为我不知道文本文件中列的宽度。 – osboy1
@marc_s我想我应该澄清我对你的回应的评论。有关即将在SQL Server的未来版本中删除数据类型的信息通常具有丰富的内容和帮助。我应该问的是,哪些内部SSIS数据类型适合用于SSIS数据流组件,如果不是DT_TEXT和DT_NTEXT,则通过管道移动长文本数据? – osboy1