Qual é o equivalente do tipo de dados do SQL Server varchar(max)
no ASE?
Por ASE quero dizer o que costumava ser conhecido como Sybase ASE, que agora pertence à SAP.
Estou tentando executar um pedaço de T-SQL construído dinamicamente com mais de 8.000 caracteres.
Se eu declarar uma variável com varchar(max)
, ASE engasga com:
Sintaxe incorreta perto da palavra-chave 'max'.
Meu próximo pensamento foi tentar o tipo de text
dados. Mas infelizmente:
Você especificou um tipo de dados incorreto para a variável que contém a string de comando 'execute imediato'.
Um exemplo mínimo, completo e verificável:
DECLARE @cmd varchar(max) --change this to varchar(4000) and it works
SET @cmd = 'SELECT 1;'
EXEC (@cmd);
GO
Alterar a declaração da variável para text
ou o que for adequado aos seus propósitos. Eu preciso executar um comando dinâmico que provavelmente tem 50.000 caracteres.
Como alternativa, eu poderia usar um cursor, mas não estou familiarizado com a forma como os cursores funcionam no ASE.
Observe que no SQL Anywhere, você pode definir um equivalente ao tipo de dados varchar(max) como declare @cmd long varchar;
, mas isso não funcionará no ASE.
(var)char max do ASE é 16384. (assumindo ASE 15.x/16.x)
Se a consulta puder ser dividida em partes, com cada parte não maior que 16 K, você poderá tentar concatená-las dentro da
execute()
chamada.Da documentação do comando execute() :
E do Exemplo 6 (mesmo link) vemos um exemplo simples: