字符串或二进制数据将被截断 - 大字符串

时间:2016-07-29 13:07:30

标签: sql sql-server tsql replace

我们有一个非常大的nvarchar(max)字段,其中包含html。在这个html中是一个img标签。

示例:

<img style="float:right" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/7gAOQW....

这一列的长度是1645151,虽然替换的内容略少于此,但不是很多。

我们要做的是在列上替换SQL:

declare @url varchar(50) = 'myimageurl';
UPDATE table SET field =
CAST(REPLACE(CAST(field as NVARCHAR(MAX)),@source,'@url') AS NVARCHAR(MAX))

其中@source是上面的图像字节为字符串,在运行替换之前分配给nvarchar(max)变量。和dest是图像的url,而不是图像字节为字符串。

虽然我仍然得到消息字符串或二进制数据会被截断。

有没有人知道在SQL中是否可以替换像这样大的字符串。

2 个答案:

答案 0 :(得分:2)

我有同样的错误,但是在不同的功能上。

错误是我的模式比我的表达式长,这意味着你的搜索模式会被截断。

我希望这有助于某人。

另外,请确保将模式和表达式放在函数的正确位置。

答案 1 :(得分:1)

您可以通过解析img标记的其余部分来重建整个字段,而不是进行替换吗?

类似的东西:

declare @Field nvarchar(max) = '<img style="float:right" src="data:image/png;base64,/9j/4AAQSkZJRgA....BAQEBLAEsAAD/7gAOQW" />'
declare @Source nvarchar(max) = 'data:image/png;base64,/9j/4AAQSkZJRgA....BAQEBLAEsAAD/7gAOQW'
declare @URL nvarchar(max) = 'www.img.img/img.png'
declare @Chars int = 20

select left(@Field,patindex('%' + left(@Source,@Chars) + '%', @Field) - 1) as HTMLStart
        ,@URL as ImgURL
        ,right(@Field,len(@Field) - patindex('%' + right(@Source,@Chars) + '%', @Field) - @Chars + 1) as HTMLEnd

如果您想一次在整个数据集上运行此功能,您只需要查找src="data:image/png;base64,元素,并使用与上述类似的方法从那里开始向后工作。取决于您如何识别要替换的二进制数据以及替换它的内容。