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

Откуда:
Сообщений: 28
Добрый день.
Есть следующий запрос:

declare @var1 AS varchar(max)
declare @var2 AS varbinary(max)

SET @var1 = 'ооочень длинная строка 001' + CHAR(0)+
                   'ооочень длинная строка 002' + CHAR(0)+
                   'ооочень длинная строка 003' + CHAR(0)+
                   'ооочень длинная строка 004' + CHAR(0)
SET @var2 = convert(VARBINARY(max), @var1)

SELECT datalength(@var2)


Последний select мне возвращает 8000.

SELECT len(@var1)


этот select мне так же возвращает 8000.

Хотя там должно быть больше, т.к. строка имеет длину порядка 10 000 знаков. Ни каких таблиц у меня нет. Просто я хочу использовать MS-SQL для преобразования строки в двоичные данные.

+ Microsoft SQL Server
Microsoft SQL Server Management Studio 10.50.1600.1
Клиентские средства служб Microsoft Analysis Services 10.50.1600.1
Компоненты доступа к данным (MDAC) 3.86.3959
Microsoft MSXML 3.0 5.0 6.0
Microsoft Internet Explorer 8.0.7601.17514
Microsoft .NET Framework 2.0.50727.5420
Операционная система 6.1.7601
1 мар 16, 10:52    [18881020]     Ответить | Цитировать Сообщить модератору
 Re: varbinary(max) в запросе.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Lokli
Просто я хочу использовать MS-SQL для преобразования строки в двоичные данные.

Тогда надо прочитать про функции конвертации, которые вы используете. Про convert, например
1 мар 16, 10:54    [18881032]     Ответить | Цитировать Сообщить модератору
 Re: varbinary(max) в запросе.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Lokli
SELECT len(@var1)



этот select мне так же возвращает 8000.

Потому что типы строковых констант и их конкатенация не зависят от типа переменной
1 мар 16, 10:58    [18881066]     Ответить | Цитировать Сообщить модератору
 Re: varbinary(max) в запросе.  [new]
Lokli
Member

Откуда:
Сообщений: 28
Чего-то я сразу не догадался, что cast и convert тут не причем.
Получается я не могу в запросе указать строковую константу более 8000 символов?
Надо разбивать?
1 мар 16, 11:38    [18881310]     Ответить | Цитировать Сообщить модератору
 Re: varbinary(max) в запросе.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Lokli
Получается я не могу в запросе указать строковую константу более 8000 символов?
Надо разбивать?

Еще раз - типы констант по-умолчанию никак не зависят ни от типа переменной, ни от типа вычисляемого выражения.
Если вы хотите получить константу кокрентного типа, то вам придется кокрентно указывать этот тип.
1 мар 16, 11:42    [18881332]     Ответить | Цитировать Сообщить модератору
 Re: varbinary(max) в запросе.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @v1 VARCHAR(MAX), @v2 VARCHAR(MAX)

SELECT
     @v1 = REPLICATE('1', 40000)
   , @v2 = REPLICATE(CAST('1' AS VARCHAR(MAX)), 40000)

SELECT LEN(@v1), LEN(@v2)

Не надо ничего разбивать. Просто внимательно пример нужно разобрать.
1 мар 16, 11:42    [18881333]     Ответить | Цитировать Сообщить модератору
 Re: varbinary(max) в запросе.  [new]
_djХомяГ
Guest
declare @var1  varchar(max)
select @var1=replicate(convert(varchar(max),'Z'),10000);
select datalength(@var1)
1 мар 16, 11:42    [18881334]     Ответить | Цитировать Сообщить модератору
 Re: varbinary(max) в запросе.  [new]
Lokli
Member

Откуда:
Сообщений: 28
Всем спасибо. Я понял свою ошибку, исправил формирование запроса.
1 мар 16, 15:23    [18882863]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить