Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Capturar el resultado de un Procedure desde un BAT

Estas en el tema de Capturar el resultado de un Procedure desde un BAT en el foro de SQL Server en Foros del Web. Buenas amigos, tengo una duda con SQL y nose si este es el foro indicado para postear, veran tengo un sistema administrativo llamado VALERY que ...
  #1 (permalink)  
Antiguo 13/02/2013, 13:12
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Capturar el resultado de un Procedure desde un BAT

Buenas amigos, tengo una duda con SQL y nose si este es el foro indicado para postear, veran tengo un sistema administrativo llamado VALERY que maneja una BD con extension MDF, para poder sacar unas estadisticas arme un PROCEDURE, usando "SQL MANAGER INTERBASE AND FIREBIRD" este es el PROCEDURE

Código SQL:
Ver original
  1. SET TERM ^ ;
  2.  
  3. CREATE OR ALTER PROCEDURE indicadores_ventas_por_producto (INICIAL DATE, FINAL DATE)
  4. RETURNS (FRANQ INTEGER, TE_CANT INTEGER, TE_MONTO DOUBLE PRECISION, ENSREG_CANT INTEGER, ENSREG_MONTO DOUBLE PRECISION, ENSGDE_CANT INTEGER, ENSGDE_MONTO DOUBLE PRECISION, SAND_CANT INTEGER, SAND_MONTO DOUBLE PRECISION, POST_CANT INTEGER, POST_MONTO DOUBLE PRECISION, CREM_CANT INTEGER, CREM_MONTO DOUBLE PRECISION, MINIS_CANT INTEGER, MINIS_MONTO DOUBLE PRECISION, ADC_CANT INTEGER, ADC_MONTO DOUBLE PRECISION, DESA_CANT INTEGER, DESA_MONTO DOUBLE PRECISION, WRAP_ENS INTEGER, WRAP_SUB INTEGER, FEC_REG DATE
  5. )
  6. AS
  7. BEGIN
  8.  
  9.     BEGIN
  10.     /* Variable de la Franquicia */
  11.     FRANQ = 14;
  12.     TE_CANT = 0;
  13.     TE_MONTO = 0;
  14.     ENSREG_CANT = 0;
  15.     ENSREG_MONTO = 0;
  16.     ENSGDE_CANT = 0;
  17.     ENSGDE_MONTO = 0;
  18.     SAND_CANT = 0;
  19.     SAND_MONTO = 0;
  20.     POST_CANT = 0;
  21.     POST_MONTO = 0;
  22.     CREM_CANT = 0;
  23.     CREM_MONTO = 0;
  24.     MINIS_CANT = 0;
  25.     MINIS_MONTO = 0;
  26.     ADC_CANT = 0;
  27.     ADC_MONTO = 0;
  28.     DESA_CANT = 0;
  29.     DESA_MONTO = 0;
  30.     WRAP_ENS  = 0;
  31.     WRAP_SUB  = 0;
  32.     FEC_REG = :INICIAL;
  33.    
  34.     SELECT
  35.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  36.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  37.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO
  38.     WHERE
  39.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  40.     AND
  41.     (VENTAS_DETALLES.PRODUCTO_NOMBRE LIKE 'TE %')
  42.     INTO :TE_CANT, :TE_MONTO;
  43.    
  44.     SELECT
  45.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  46.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  47.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  48.     WHERE
  49.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  50.     AND
  51.     (PRODUCTOS.DEPARTAMENTO_CODIGO='101')
  52.     INTO :ENSREG_CANT, :ENSREG_MONTO;
  53.    
  54.     SELECT
  55.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  56.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  57.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  58.     WHERE
  59.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  60.     AND
  61.     (PRODUCTOS.DEPARTAMENTO_CODIGO='10')    
  62.     INTO :ENSGDE_CANT, :ENSGDE_MONTO;
  63.    
  64.     SELECT
  65.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  66.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  67.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  68.     WHERE
  69.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  70.     AND
  71.     (PRODUCTOS.DEPARTAMENTO_CODIGO='06')
  72.     INTO :SAND_CANT, :SAND_MONTO;
  73.    
  74.     SELECT
  75.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  76.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  77.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  78.     WHERE
  79.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  80.     AND
  81.     (PRODUCTOS.DEPARTAMENTO_CODIGO='11')
  82.     INTO :POST_CANT, :POST_MONTO;
  83.    
  84.     SELECT
  85.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  86.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  87.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO
  88.     WHERE
  89.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  90.     AND
  91.     (VENTAS_DETALLES.PRODUCTO_NOMBRE = 'CREMA DEL DIA')
  92.     INTO :CREM_CANT, :CREM_MONTO;
  93.    
  94.     SELECT
  95.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  96.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  97.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  98.     WHERE
  99.         (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  100.     AND
  101.         (PRODUCTOS.DEPARTAMENTO_CODIGO='05')
  102.     INTO :MINIS_CANT, :MINIS_MONTO;
  103.    
  104.     SELECT
  105.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  106.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  107.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  108.     WHERE
  109.         (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  110.     AND
  111.         (PRODUCTOS.DEPARTAMENTO_CODIGO='09')
  112.     INTO :ADC_CANT, :ADC_MONTO;
  113.    
  114.     SELECT
  115.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  116.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  117.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  118.     WHERE
  119.         (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  120.     AND
  121.         (PRODUCTOS.DEPARTAMENTO_CODIGO='12')
  122.     INTO :DESA_CANT, :DESA_MONTO;
  123.    
  124.     SELECT
  125.     (SUM(IIF(VENTAS.tipo_documento = 'FAC' AND PRODUCTOS.CODIGO_PRODUCTO = '12019',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV' AND PRODUCTOS.CODIGO_PRODUCTO = '12019',ventas_detalles.CANTIDAD,0))) AS wrapENS,
  126.     (SUM(IIF(VENTAS.tipo_documento = 'FAC' AND PRODUCTOS.CODIGO_PRODUCTO = '12020',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV' AND PRODUCTOS.CODIGO_PRODUCTO = '12020',ventas_detalles.CANTIDAD,0))) AS wrapSAN
  127.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  128.     WHERE
  129.         (VENTAS.FECHA_EMISION BETWEEN '2012.12.01' AND '2012.12.31')
  130.     INTO :WRAP_ENS, :WRAP_SUB;
  131.    
  132.     SUSPEND;
  133.     END
  134. END
  135. ^
  136. SET TERM ; ^
Como veran consulto cada dato que necesito y lo guardo dentro de una Var, ahora el procedure lo ejecuto asi desde un BAT

"isql HOST:"C:\VALERY_POS\datos\valery.mdf" -user 'SYSDBA' -password 'masterkey' -i procedure_producots.sql"

y el .SQL
"delete from numeros;
commit;
execute procedure indicadores_ventas_por_producto('2013.01.01','2013 .01.31');
commit;
quit;"

Como puedo hacer para que el procedure me Retorne algo como
"INSERT INTO indicadores_ventas_xproducto(ID_FRANQUICIA,TE_CANT ,TE_MONTO,ENSREG_CANT,ENSREG_MONTO,ENSGDE_CANT,ENS GDE_MONTO,SAND_CANT,SAND_MONTO,POST_CANT,POST_MONT O,CREM_CANT,CREM_MONTO,MINIS_CANT,MINIS_MONTO,ADC_ CANT,ADC_MONTO,DESA_CANT,DESA_MONTO,WRAP_ENS,WRAP_ SUB,FEC_REG)
VALUES(:FRANQ,:TE_CANT,:TE_MONTO,:ENSREG_CANT,:ENS REG_MONTO,:ENSGDE_CANT,:ENSGDE_MONTO,:SAND_CANT,:S AND_MONTO,:POST_CANT,:POST_MONTO,:CREM_CANT,:CREM_ MONTO,:MINIS_CANT,:MINIS_MONTO,:ADC_CANT,:ADC_MONT O,:DESA_CANT,:DESA_MONTO,:WRAP_ENS,:WRAP_SUB,:FEC_ REG);"
y dicha cadena poderla leer desde el bat? alguna idea?
  #2 (permalink)  
Antiguo 13/02/2013, 13:19
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Capturar el resultado de un Procedure desde un BAT

primero puedes modificar el procedure? si es asi puedes poner que los valores del select te los regrese en variables usando output, o que tu procedure retorne una tabla e insertarla dentro de una tabla temporal, o si no dentro del mismo procedure puedes poner tu insert...porque hacerlo desde bat?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 13/02/2013, 13:46
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Capturar el resultado de un Procedure desde un BAT

si claro que puedo modificarle, pues el insert no sera interno es decir el procedure se ejecutara en una maquina local y necesito esos datos insertarlos en una bd montada a la red, por eso neesito el comando para COPIAR y PEGAR, al menos que existan otras opciones
  #4 (permalink)  
Antiguo 13/02/2013, 13:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Capturar el resultado de un Procedure desde un BAT

a ok entonces lo que necesitas es hacer un bcp out y despues un bcp in, que es unbcp out es una instruccion que te pone en un archivo de texto el contenido de tu base de datos asi puedes enviar este archivo a la maquina de la red y desde ahi hacer un bcp in(que es meter este archivo a la base de datos), sencillo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/02/2013, 13:56
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Capturar el resultado de un Procedure desde un BAT

ni idea de como hacer eso q dijiste
  #6 (permalink)  
Antiguo 13/02/2013, 14:09
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Capturar el resultado de un Procedure desde un BAT

Te mostrare de donde me estoy guiando, que un amigo hizo:
1- El inserto el procedure dentro de la BD (valery.mdf) (su procedure al final hace un INSERT en una tabla para almacenar temporalmente los datos q necesita).
2- llama al procedure con este bat, y de inmediato selecciona el renglon q inserto, para guardarlo en un SQL con el formato INSERT:
"isql SERVIDOR:"C:\VALERY_POS\datos\valery.mdf" -user 'SYSDBA' -password 'masterkey' -i procedure_numeros.sql
fbexport -Si -H SERVIDOR -D "C:\VALERY_POS\datos\valery.mdf" -P masterkey -Q "select id_franquicia,fact,dev, facturado,devolucion,compras_tienda,compras_kepen, EXTRACT(year FROM fec_reg)||'-'|| EXTRACT(month FROM fec_reg)||'-'|| EXTRACT(day FROM fec_reg) from numeros" -F "numeros.sql"
pause"

procedure_numeros.sql:
"delete from numeros;
commit;
execute procedure generales('2013.01.01','2013.01.31');
commit;
quit;"

lo que yo trato de hacer es lo mismo sin tener que guardar para luego extraer, si no que el procedure me haga un return de una cadena "INSERT INTO..." con los datos q obtubo y meter ese return en un archivo sql, o que el procedure me genere un BACKUP de solo ese registro, pero nose como hacer eso ni desde el procedure ni desde el bat
  #7 (permalink)  
Antiguo 13/02/2013, 14:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Capturar el resultado de un Procedure desde un BAT

ocupas un bcp out, busca informacion sobre el comando bcp, lo que quieres hacer es lo mismo pero complicandote las cosas...

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 13/02/2013, 14:17
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Capturar el resultado de un Procedure desde un BAT

Bueno voy a leer pero si me hechas una ayuda no estaria mal, otra cosa que se me ocurre (dezconoz si se trata de lo mismo) es ver si puedo hacer un BACKUP de la consulta osea que el procedure se ejecute guarde la data y le haga un select y el resultado de dicho select lo exporte...
  #9 (permalink)  
Antiguo 13/02/2013, 15:05
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Capturar el resultado de un Procedure desde un BAT

No consigo nada que me ayude lo poco que entendi tengo q instalar BCP en las maquinas (porque ellas no tienen instalado ningun motor de BD) y eso seria un lio... y de verdad me e enredado con esos datos :(
  #10 (permalink)  
Antiguo 13/02/2013, 15:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Capturar el resultado de un Procedure desde un BAT

a ver ya no entendi que necesitas, dices que quieres pasar los datos de una base a otra no?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 13/02/2013, 15:55
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Capturar el resultado de un Procedure desde un BAT

si para ser super especificos de un archivo MDF a phpmyadmin... por eso uso el "SQL MANAGER for InterBase and Firebird puesto que en las pcs donde estan los archivos ".mdf" no hay ningun gestor de bd (x eso nopuedo usar el bcp) entnces estoy tratando de crear un .bat que me jale los datos que necesito para llevarlos a mysql... por eso necesito que el procedure haga un "export" de la data que el mismo esta manejando.

Etiquetas: bat, procedure, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:49.