Переполнение текста при использовании nvarchar (max)? - PullRequest
0 голосов
/ 24 октября 2008

Я столкнулся со странной ситуацией, которая, кажется, связана с переполнением длинного текста. Я использую fn_pcre_replace (из расширенной хранимой процедуры xp_pcre ) в столбце nvarchar(max), и когда я заменяю больше символов, чем было изначально, он возвращает NULL, если исходная строка была более 8000 длинные символы.

Например, это

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 Ответ

1 голос
/ 24 октября 2008

Это ограничение 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, чтобы это не ограничивало использование внешних процедур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...