SQL Server将按分隔符(,)将文本拆分为6列



我在处理sql中的长文本时遇到了一个问题。

例如,我有这个数据

(26,Contacted,Hi, thank you for helping ,Alaa,Alaa,'2018-12-04 14:45:36')

预期结果:

ID            25
Status       Contacted
comment      Hi, thank you for helping
Updated_By   Alaa
Created_By   Alaa
Date_Created  2018-12-04 14:45:36 

然而,这就是我得到的

ID            25
Status       Contacted
comment      Hi
Updated_By   thank you for helping
Created_By   Alaa
Date_Created  Alaa 

将插入该表

ID int,
Status nvarchar(1000),
comment nvarchar(max),
Updated_By nvarchar(1000),
Created_By nvarchar(1000),
Date_Created DATETIME)

我插入声明如下

insert into xyz(ID,Status,comments,Updated_By,Created_By,Date_Created) 
select ID = JSON_VALUE(S,'$[0]'),
Status = JSON_VALUE(S,'$[1]'),
comments= JSON_VALUE(S,'$[2]'),
Updated_By = JSON_VALUE(S,'$[3]'),
Created_By = JSON_VALUE(S,'$[4]'),
Date_Created = JSON_VALUE(S,'$[5]')
FROM @dataset    
Cross Apply ( values ( '["'+replace(STRING_ESCAPE(records,'json'),',','","')+'"]' ) ) B(S)

@数据集是一个包含记录的表

如何在不拆分评论部分的情况下拆分文本?

需要引用字符串文字,即

insert SomeTable (Id, Status, comment, Updated_By, Created_By, Date_Created)
values  (26,'Contacted',N'some comment that may contain '',''',
'Alaa','Alaa','2018-12-04 14:45:36');

这里注意到'围绕字符串文字,其上的N前缀表示";unicode";(尽管非unicode文字将毫无问题地升级为unicode列(,并且值中的单引号需要加倍,即''

请注意,如果您是从代码而不是作为一个固定的SQL脚本来执行此操作,则应该使用参数:

insert SomeTable (Id, Status, comment, Updated_By, Created_By, Date_Created)
values  (@id, @status, @comment, @updatedBy, @createdBy, @dateCreated);

向正在使用的任何数据访问API添加参数。

最新更新