Ver Mensaje Individual
  #3  
Antiguo 27-11-2014
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
Hola orodriguezca, gracias por responder

En cuanto al servidor tenias razón, es la versión 2008, "Microsoft SQL Server 2008 (RTM) - 10.0.1600.22", es por eso que podía hacer el merge

En cuanto a este tipo de sentencias, es cierto que no se pueden ejecutar con un SQLQuery, pero puestos a que no he conseguido ponerlo a funcionar ya he probado con todo :-). La forma de ExecSQL es de lo poco que me quedaba, pero no ha funcionado tampoco. Originalmente se deberia de ejecutar de esta forma, muy similar al ExecSQL, pero directamente sobre el componente CONNECTION, y la ejecución siempre sera en RUNTIME, dentro de un proceso de intercambio de datos con otras tablas.

Código:
    try
      ADOConnection1.Execute(
        'merge STOCKS as target' +
        'using (values (''X3'', ''03'', ''2014-11-27'', ''SA123'', 3))  as source' +
        '(EMPRESA,ALMACEN,FECHA,ARTICULO,UNIDADES) on ' +
        '   target.empresa= source.empresa and ' +
        '   target.almacen=source.almacen and ' +
        '   target.fecha=source.fecha and ' +
        '   target.articulo=source.articulo  and ' +
        'when matched then ' +
        '    update ' +
        '    set UNIDADES = source.UNIDADES ' +
        'when not matched then ' +
        '    insert (EMPRESA,ALMACEN,FECHA,ARTICULO,UNIDADES)' +
        '    values (' +
        '      source.EMPRESA,' +
        '      source.ALMACEN,' +
        '      source.FECHA,' +
        '      source.ARTICULO,' +
        '      source.UNIDADES' +
        '    );'
      );
    except
      On E:Exception do begin
        MessageDlg(E.Message, mtError, [mbOK], 0);
      end;
    end;
Aunque tras muchas pruebas, creo que el error no esta en los componentes, si no en la pasarela de conexión que realiza un preanalisis de la sentencia bloqueandola, y no dejandola llegar al motor de B.D., pues cuando intento esto mismo con los ZEOS el error y el comportamiento es exactamente el mismo.

¿Hay alguna forma de evitar este analisis previo y que le llegue al motor de BD?? para que en caso de error sea el propio motor el que de el error
Responder Con Cita