Sqlexec con clausula where

Necesito conectarme a una base de datos de sql server 2008 a través de funciones SPT ejecutando el comando SQLEXCEC más una clausula where que tenga un cursor que genero localmente.
Seria así:
SQLEXEC (nconectionhandle,'delete from sqlpedidos where registro not in (SELECT registro from sqlpedi )','aevaluar')
sqlpedidos= base en el sql server
sqlpedi =  cursor o tabla local
La idea es borrar los pedidos cuyo registro no esta en el cursor local.
Este comando lo uso localmente y me anda perfecto ahora cuando voy contra el sql no me ejecuta la consulta.

1 respuesta

Respuesta
1
Para borrar los registros que no están en el cursor primero lee sqlpedido y busca el pedido en sqlpedi, si lo encuentra colócale una marca, luego borra los que no tienen la marca.
Gracias por responder, la lógica es así:
El programa genera una tabla local sqlpedi.dbf que es la que se utiliza para consultar, esta tabla es la que tiene que actualizar en el sql server la tabla sqlpedidos.
Es decir cada vez que se genera esta tabla (sqlpedi) la misma contiene los datos más frescos y por lo tanto son los que deben quedar.
Para eso el programa compara los registros vigentes en el sql server y la tabla local, si el registro esta... se fija si cambio, si cambio... lo actualiza, sino no hace nada.
Si el registro no esta... lo agrego.
Hasta ahí anda perfecto, el problema lo tengo en que tengo que eliminar del sql todo lo que sobra..., es decir un registro que antes estaba y ahora ya no.
El problema lo puedo resolver trayendo los datos del sql a una vista local y leyendo el sqlpedidos como vos me planteas, el tema es de velocidad ya que me demora mucho al tener que traer todos los datos porque los mismo están en un servidor remoto al que accedo por la web, no esta en la red local.
Desde ya muchísimas gracias por tu interés
A ver si entendí,
Tienes un archivo de pedidos en el servidor, solo traes al terminal Local los pedidos que vas a modificar y/o eliminar
Entonces eso quiere decir, si el pedido tiene 5 items de los cuales 3 no necesitas y te quedas con la diferencia, si es así te sugiero que coloques un campo en donde indica la acción a realizar, de tal manera que al buscar desde el SqlPedi en SqlPedido, si el registro tiene "A" lo adiciona, Si tiene "M" lo busca y modifica y Si tiene "D" lo busca y elimina, y si no tiene nada bueno no hace nada, je
Ten presente que todos los registros se van a marcar en la vista y los que tienes que deletear se eliminan solo en el servidor.
Espero te sirva, en todo caso me avisas a ver si puedo dar una mejor ayuda.
No no es así... yo no traigo nada al terminal local desde el sql.
El procedimiento es simple:
1ro Calculo todo localmente... Resultado (sqlpedi.dbf) Se va regenerando cada vez que se ejecuta el exe.
2do Lo subo al servidor sql a la tabla sqlpedidos... La 1ra vez al estar vacío insertara todos los registros desde el sqlpedi.dbf al sqlpedidos. La 2da vez y subsiguientes el sqlpedi.dbf se comparara con el sqlpedidos si el registro esta... ve si se modifico y lo actualiza, si no esta lo agrega. ¿Bien?
3ro Tendría que borrar del sqlpedidos los pedidos que estaban en la 1er subida y ya no están en el sqlpedi.dbf
Para eso ejecuto esta instrucción... pero me tengo que traer todos los registros...
SQLEXEC(nconectionhandle,'select registro from sqlpedidos','aevaluar')
SELECT aevaluar
delete from aevaluar where registro not in (SELECT registro from sqlpedi)
TABLEUPDATE(.t.,.t.)
Mi idea era ya en Sqlexe decirle pero no funciona la clausula wher
SQLEXEC(nconectionhandle,'delete from sqlpedidos where registro not in (SELECT registro from sqlpedi),'aevaluar') && Esta seria la ideal
A ver tengo algunas interrogantes o algo no esta muy claro
1) Si el archivo sqlpedi es temporal y solo dura mientras se ejecuta el exe, cada vez que se ejecuta el programa el archivo esta vacío entonces, si ingreso 5 pedidos estos los carga al sqlpedido, termino de usar el programa. Lo vuelvo a llamar y cargo 3 pedidos, ¿el archivo SqlPedido se queda con 3 pedidos?, ¿ y no con 8.?
2) Si solo queda con los 3 últimos pedidos, entonces simplemente primero deleteo los registros de sqlpedidos y adiciono los registros desde sqlpedi y listo,
Si me puedes dar mayor información al respecto o la lógica no esta muy clara
saludos
Es como la opción 1... Igualmente ya lo solucione aunque no se si es la mejor forma. Comparo los registros del sqlpedi vs sqlpedido y si hay diferencias las actualizo, si se agregaron registros los agrego y en el sqlpedidos hay registros que no están en el sqlpedi los borro. El tema es que me tengo que traer todos los registros para ver cuales borrar. Lo obtimize trayendo solamente la clave de cada pedido y no todos los campos.
Desde ya te agradezco mucho tu ayuda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas