我们有一个非常大的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中是否可以替换像这样大的字符串。
答案 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,
元素,并使用与上述类似的方法从那里开始向后工作。取决于您如何识别要替换的二进制数据以及替换它的内容。