Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
roma1975
Member

Откуда:
Сообщений: 253
Добрый день.
Размер varchar=8000 символов, а мне нужно в процедуре записать в локальную переменную больше символов,
чтобы потом там попробовать найти последовательность символов. Тип text нельзя использовать в качестве
локальной переменной ругается. Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?
28 окт 16, 14:21    [19833774]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
varchar (max)
28 окт 16, 14:21    [19833781]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
roma1975
Member

Откуда:
Сообщений: 253
Так написано же в интернете,что varchar (max) это varchar (8000), то есть varchar (max)=varchar (8000)
28 окт 16, 14:26    [19833825]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
roma1975
Так написано же в интернете,что varchar (max) это varchar (8000), то есть varchar (max)=varchar (8000)

где https://msdn.microsoft.com/en-us/library/ms176089.aspx
28 окт 16, 14:27    [19833834]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
roma1975
Member

Откуда:
Сообщений: 253
А ну ладно спасибо, попробую varchar (max) использовать.
28 окт 16, 14:31    [19833871]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
Типичные грабли при работе с MAX
DECLARE @t VARCHAR(MAX) = REPLICATE( 'A', 9000 )
SELECT LEN( @t )
1 ноя 16, 18:24    [19847742]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
Хе-хе )
Guest
Это документированные грабли

Типы возвращаемых значений REPLICATE
Возвращает тот же тип, что и аргумент string_expression

Если аргумент string_expression не принадлежит к типу varchar(max) или nvarchar(max), функция REPLICATE усекает возвращаемое значение до 8000 байт.
1 ноя 16, 18:42    [19847792]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Хе-хе ),

та собственно суть комментария не ясна :) похвастаться? к вопросу ТС не относится... а теперь стихи :)
1 ноя 16, 18:47    [19847810]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
TaPaK
Хе-хе ),
та собственно суть комментария не ясна :) похвастаться? к вопросу ТС не относится... а теперь стихи :)

Хвастаться тем, что я наступал на грабли? Скорее, предупреждение.
1 ноя 16, 19:06    [19847856]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
Хе-хе )
Это документированные грабли

Типы возвращаемых значений REPLICATE
Возвращает тот же тип, что и аргумент string_expression

Если аргумент string_expression не принадлежит к типу varchar(max) или nvarchar(max), функция REPLICATE усекает возвращаемое значение до 8000 байт.

В смысле ТСу требуется переменная более 8000 символов. Скорее всего заполнять он ее будет вот так:
DECLARE @t VARCHAR(MAX);
SET @t = REPLICATE( 'A', 8000 ) + REPLICATE( 'A', 8000 )
SELECT LEN( @t )

И будет очень удивлен результату...
1 ноя 16, 19:17    [19847884]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли тип локальной переменной куда в процедуре можно занести более 8000 символов?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Руслан Дамирович
Хе-хе )
Это документированные грабли

Типы возвращаемых значений REPLICATE
Возвращает тот же тип, что и аргумент string_expression

Если аргумент string_expression не принадлежит к типу varchar(max) или nvarchar(max), функция REPLICATE усекает возвращаемое значение до 8000 байт.

В смысле ТСу требуется переменная более 8000 символов. Скорее всего заполнять он ее будет вот так:
DECLARE @t VARCHAR(MAX);
SET @t = REPLICATE( 'A', 8000 ) + REPLICATE( 'A', 8000 )
SELECT LEN( @t )

И будет очень удивлен результату...


если не читать документацию то конечно удивлен, а если прочитать, то
DECLARE @t VARCHAR(MAX), @a VARCHAR(MAX) = 'A'
SET @t = REPLICATE( @a, 8000 ) + REPLICATE( @a, 8000 )
SELECT LEN( @t )
1 ноя 16, 19:31    [19847906]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить