我遇到了一个似乎涉及长文本溢出的奇怪情况。我在fn_pcre_replace
列上使用nvarchar(max)
(来自xp_pcre extended stored procedure),当我用比原来更多的字符替换时,如果原始字符串超过8000个字符,则返回NULL长。
例如,这个
Select master.dbo.fn_pcre_replace(Overview,'a', 'X')
from ProjectContent
按预期工作,但是这个
Select master.dbo.fn_pcre_replace(Overview,'a', 'XXX')
from ProjectContent
在大多数情况下,返回NULL(显然,Len(Overview)>8000
处)。
这是xp_pcre
的限制,还是我可以在SQL中做些什么来使其工作?
答案 0 :(得分:1)
这是xp_pcre
的限制。看来源:
switch (bType)
{
case SRVBIGCHAR:
case SRVBIGVARCHAR:
break;
default:
throw XpException(
StringBuilder()
<< "Invalid data type on parameter "
<< paramNum
<< " (should be CHAR or VARCHAR)."
);
}
我可以总结这两个值(从<srv.h>
)允许最多8000个字符。 SRVBIGVARCHAR is
可变长度字符数据类型, 长度0到8000字节。
您需要更新源并重新编译并支持SRVTEXT或SRVVARCHAR,因此在使用外部过程时它不是限制因素。