Эквивалент varchar (max) в ASE

Oct 20 2020

Что эквивалентно varchar(max)типу данных SQL Server в ASE?

Под ASE я имею в виду то, что раньше называлось Sybase ASE, а теперь принадлежит SAP.

Я пытаюсь выполнить часть динамически созданного T-SQL, длина которой превышает 8000 символов.

Если я объявлю переменную с помощью varchar(max), ASE захлебнется:

Неправильный синтаксис рядом с ключевым словом "макс".

Следующей моей мыслью было попробовать этот textтип данных. Но увы:

Вы указали неверный тип данных для переменной, содержащей командную строку «выполнить немедленно».

Минимальный, полный и проверяемый пример:

DECLARE @cmd varchar(max) --change this to varchar(4000) and it works
SET @cmd = 'SELECT 1;'
EXEC (@cmd);
GO

Изменение объявления переменной на textлюбое другое, что будет соответствовать вашим целям. Мне нужно выполнить динамическую команду длиной, вероятно, 50 000 символов.

В качестве альтернативы я мог бы использовать курсор, но я не знаком с тем, как курсоры работают в ASE.

Обратите внимание, что в SQL Anywhere вы можете определить эквивалент типа данных varchar (max) as declare @cmd long varchar;, однако это не будет работать в ASE.

Ответы

1 markp-fuso Oct 20 2020 at 20:41

Максимальное значение символа (var) ASE равно 16384. (при условии ASE 15.x / 16.x)

Если запрос можно разбить на части, каждый из которых не превышает 16 КБ, вы можете попробовать объединить их внутри execute()вызова.

Из документации по команде execute () :

Нет никаких ограничений на количество символов, поставляемых с буквальной строкой.

А из примера 6 (та же ссылка) мы видим простой пример:

execute ('select ' + @columname + ' from ' + @tablename + ' where id=3')