SQL Server 2012将nvarchar(max)中的换行符拆分为单独的行

16 浏览
0 Comments

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)之外的不同定界符,包括与我的简单表示例中的空格,但是我得到了期望分号的错误。有人看出我做错了什么吗?

0
0 Comments

问题出现的原因:

在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)字段中的换行符拆分成单独的行。通过调用该函数,可以满足将字符串中的换行符拆分成单独的行的需求。

0