Sintaxis incorrecta cerca de la palabra key 'con' (SQL)

Tengo un pequeño problema.

Cuando ejecuto este SQL:

with ID_Table as ( select row_number() over (order By SS_ID) As row_id, ss_id from slide_show ) select t0.* from ID_Table as t1 inner Join slide_show as t0 on t1.ss_id = t0.ss_id where t1.row_id between 0 and 1 order by t1.row_id asc; 

en SQL Express, se ejecuta y devuelve la primera fila como debería (similar al Límite 0,1 en MySQL). Sin embargo, cuando ejecuto esto en delphi a través del object TADOQuery, recibo el error en el título. Supongo que el object ADO está haciendo algo en el path, pero no entiendo qué.

Nota: Este es el SQL exacto que paso al object ADO.

¿Alguien tiene alguna idea?

Tratar:

 SELECT t0.* FROM (SELECT row_number() over(ORDER BY SS_ID) AS row_id, ss_id FROM slide_show) AS t1 INNER JOIN slide_show AS t0 ON t1.ss_id = t0.ss_id WHERE t1.row_id BETWEEN 0 AND 1 ORDER BY t1.row_id ASC; 

La palabra key WITH debe ir precedida de un punto y coma cuando haya otras instrucciones antes en un lote (técnicamente hablando, el enunciado anterior tiene que terminarse con ";", pero ponerlo antes del WITH es un poco más fácil de mantener) .

Supongo que ADO establece una variable de connection o algo similar, por lo que el CON ya no es el primero en el lote. Cámbielo a "; WITH" y vea si eso funciona.

¿Qué proveedor OLE DB está especificando en su cadena de connection? Para poder usar la syntax WITH (CTE) necesita usar el proveedor de SQL Native Client, por ejemplo

Provider=SQLNCLI10.1

en lugar de decir el proveedor OLE DB de SQL Server, por ejemplo

Provider=SQLOLEDB.1

Prueba esto:

 declare @a int with ID_Table as ( select row_number() over (order By SS_ID) As row_id, ss_id from slide_show ) select t0.* from ID_Table as t1 inner Join slide_show as t0 on t1.ss_id = t0.ss_id where t1.row_id between 0 and 1 order by t1.row_id asc; //------------------------------ //with can not be the first row