繁体   English   中英

使用nvarchar(max)时文本溢出?

[英]Text overflow when using nvarchar(max)?

我遇到了一种奇怪的情况,似乎涉及长文本溢出。 我在nvarchar(max)列上使用fn_pcre_replace (来自xp_pcre扩展存储过程 ),并且当我替换的字符多于原始字符时,如果原始字符串的长度超过8000个字符,则返回NULL。

例如这个

Select master.dbo.fn_pcre_replace(Overview,'a', 'X')
from ProjectContent 

可以正常工作,但这

Select master.dbo.fn_pcre_replace(Overview,'a', 'XXX')
from ProjectContent 

在大多数情况下(显然, Len(Overview)>8000 )返回NULL。

这是xp_pcre的限制,还是我可以在SQL中做一些事情来实现此目的?

这是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现为

可变长度字符数据类型,长度为0到8000个字节。

您将需要更新源代码并重新编译以支持SRVTEXT或SRVVARCHAR,因此在使用外部过程时,这不是限制因素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM