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

时间:2008-10-24 02:22:59

标签: sql-server regex sql-server-2005

我遇到了一个似乎涉及长文本溢出的奇怪情况。我在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中做些什么来使其工作?

1 个答案:

答案 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,因此在使用外部过程时它不是限制因素。