【发布时间】:2016-12-04 05:23:51
【问题描述】:
我们有一个非常大的 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 中替换这么大的字符串。
【问题讨论】:
-
只是考虑这个问题,我倾向于用图像 url 替换整个字段的值来代替二进制数据,而不是尝试进行字符串替换。我认为这会更干净,更容易阅读。而且更可靠。
-
如果“field”的长度是1645151,外部的“CAST”不需要转换成nvarchar(1645151)吗? REPLACE 函数应该已经返回 nvarchar(max)。
-
@ADyson nvarchar 的最大大小为 8000
-
@SeanLange 就是这样。在那一刻我失去了理智。这意味着“字段”已经是 nvarchar(max),在这种情况下,为什么需要任何强制转换?
-
@ADyson,实际上,nvarchar(n) 的最大值是 4000 个字符而不是 8000 个字符。
标签: sql sql-server tsql replace