Эквивалент varchar (max) в ASE
Что эквивалентно 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.
Ответы
Максимальное значение символа (var) ASE равно 16384. (при условии ASE 15.x / 16.x)
Если запрос можно разбить на части, каждый из которых не превышает 16 КБ, вы можете попробовать объединить их внутри execute()вызова.
Из документации по команде execute () :
Нет никаких ограничений на количество символов, поставляемых с буквальной строкой.
А из примера 6 (та же ссылка) мы видим простой пример:
execute ('select ' + @columname + ' from ' + @tablename + ' where id=3')