Olá,
Na verdade, este é um problema de 2 partes, mas você está condenado de qualquer maneira ?
O ? é permitido dentro de uma cláusula superior do ponto de vista da sintaxe se de fato fosse conter um número, mas internamente dentro do controlador isso tentará criar um procedimento leve que é enviado ao ASE. (create proc as select top ? col from)
Isso falha no extremo do ASE e é reenviado como uma declaração de linguagem com variável, mas isso então gera o erro de sintaxe, pois a variável não pode ser usada no contexto de uma cláusula superior.
Está sendo enviado 'select top @dr_ta0 charpk' etc, o que falha imediatamente com um erro de sintaxe na fase de análise.
Eu diria que, dado que nada é legal do lado do ASE em relação a esta consulta, então o controlador realmente deveria gerar uma mensagem de erro para evitar que isso aconteça.
Para que isso funcione como você precisa, são necessárias melhorias no lado do ASE para permitir que uma variável seja usada como n em uma cláusula 'top n'.
Cumprimentos,
Simon