SQL Server 2012将nvarchar(max)中的换行符拆分为单独的行
SQL Server 2012将nvarchar(max)中的换行符拆分为单独的行
我已经阅读了许多关于如何做到这一点的帖子,但无法使其工作。我有一个包含大量文本的nvarchar(max)
列的表。我需要将其拆分为单独的行,其中每个回车符都会被输入(以拆分段落)。
我找到了以下函数:
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max), @Delimiter varchar(10)) Returns Table As Return (Select RetSeq = Row_Number() over (Order By (Select null)), RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)'))) From (Select x = Cast(''+ Replace(@String, @Delimiter, ' ') + ' ' as xml).query('.')) as A Cross Apply x.nodes('x') AS B(i) );
我已经在一个简单的虚拟表上使用空格作为定界符进行了测试,并且它有效。但是当我尝试在我的实际表上使用以下查询代码进行测试时:
Select A.AssignmentID, Notes = B.RetVal From dbo.Assignments A Cross Apply [dbo].[udf-Str-Parse](A.TitleNotes, char(13)) B Where AssignmentID = 20
我收到以下消息:
Msg 9411, Level 16, State 1, Line 1
XML解析:第2行,第127个字符,需要分号
我尝试使用除char(13)
之外的不同定界符,包括与我的简单表示例中的空格,但是我得到了期望分号的错误。有人看出我做错了什么吗?
问题出现的原因:
在SQL Server 2012中,将nvarchar(max)字段中的换行符拆分成单独的行是一个常见的需求。然而,SQL Server 2012并没有内置的函数或方法来实现这个功能。因此,需要创建一个自定义函数来实现这个功能。
解决方法:
根据上述代码,可以看出解决方法如下:
1. 首先,使用CREATE FUNCTION语句创建一个名为FN_SPLIT的函数。
2. 函数有两个参数:_str和_separator,分别用于表示要拆分的字符串和拆分字符串的分隔符。
3. 函数返回一个包含拆分后的字符串的表,表中包含两列:ID和SPLIT。
4. 在函数内部,首先声明一个XML变量,并将其初始化为一个包含换行符的XML字符串。
5. 然后,使用REPLACE函数将字符串中的换行符替换为</n><n>,将其格式化为XML的形式。
6. 接下来,使用INSERT INTO语句将拆分后的字符串插入到表中。
7. 使用SELECT语句和nodes方法将XML字符串拆分成单独的行,并将结果插入到表中的SPLIT列中。
8. 最后,使用RETURN语句返回包含拆分后的字符串的表。
以上就是解决这个问题的方法,通过创建一个自定义函数,可以将nvarchar(max)字段中的换行符拆分成单独的行。通过调用该函数,可以满足将字符串中的换行符拆分成单独的行的需求。