El problema parece estar asociado con la instrucción SET. Creo que la expresión no puede tener más de 4000 bytes de tamaño. No es necesario realizar ningún cambio en ninguna configuración si todo lo que intenta hacer es asignar una declaración generada dinámicamente que tiene más de 4000 caracteres. Lo que tienes que hacer es dividir tu tarea. Si su declaración tiene 6000 caracteres, busque un punto de ruptura lógico y luego concatene la segunda mitad con la misma variable. Por ejemplo:
SET @Query = 'SELECT ....' [Up To 4,000 characters, then rest of statement as below]
SET @Query = @Query + [rest of statement]
Ahora ejecute su consulta normalmente, es decir, EXEC ( @Query )