2008-10-24 36 views
0

我遇到了一個似乎涉及長文本溢出的奇怪情況。我在nvarchar(max)列上使用fn_pcre_replace(來自xp_pcre extended stored procedure),當我用比原來更多的字符替換時,如果原始字符串超過8000個字符,它將返回NULL。使用nvarchar(max)時文本溢出?

例如,這

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

這是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,因此它在使用外部過程時不是限制因素。

+0

謝謝!我想我只會用.NET而不是SQL進行清理。 – 2008-10-24 13:36:17