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

[SOLUCIONADO] OUTPUT Incomplento Utilizando Varible Table

Estas en el tema de OUTPUT Incomplento Utilizando Varible Table en el foro de SQL Server en Foros del Web. Buen dia. Me pueden dar una orientacion de que estoy haciendo mal adjunto el codigo y les comento. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE ...
  #1 (permalink)  
Antiguo 12/10/2016, 16:44
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
OUTPUT Incomplento Utilizando Varible Table

Buen dia.

Me pueden dar una orientacion de que estoy haciendo mal adjunto el codigo y les comento.

Código SQL:
Ver original
  1. CREATE PROCEDURE sp_test1(
  2.     @cliente_codigo CHAR(6),
  3.     @producto_codigo CHAR(2),
  4.     @fecha DATE,
  5.     @dias INT,
  6.     @sucursal CHAR(6) output,
  7.     @cantidad INT output,
  8.     @valor1 DECIMAL(5,2) output,
  9.     @valor2 DECIMAL(5,2) output
  10. )
  11. AS
  12. DECLARE @tmp TABLE (vl_sucursal CHAR(6),
  13.                                 vl_cantidad INT,
  14.                                 vl_valor1 DECIMAL(5,2),
  15.                                 vl_valor2 DECIMAL(5,2)
  16.                            )
  17.  
  18. --PARAMETROS DE INGRESO  '000001','FF','07-02-2014',3
  19. INSERT INTO @tmp(vl_sucursal,vl_cantidad,vl_valor1,vl_valor2) EXEC ('execute procedure proc_calcula_nuevodato (?,?,?,?)',@cliente_codigo,@producto_codigo,@fecha,@dias) AT SERVIDOR1
  20.  
  21. SELECT @sucursal=vl_sucursal,
  22.              @cantidad=vl_cantidad,
  23.              @valor1=vl_valor1,
  24.              @valor2=vl_valor2
  25. FROM   @tmp
  26.  
  27. GO

La inquietud viene a que este SP me tendria que devolver mas registro, pero siempre me devuelve uno y no se donde me equivoco, ya que he realizado antes SP con select sencillos y devuelve datos.

Espero su apoyo

Última edición por jm_shinigami; 12/10/2016 a las 16:49
  #2 (permalink)  
Antiguo 13/10/2016, 09:18
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: OUTPUT Incomplento Utilizando Varible Table

¿En que motor de base de datos estas trabajando?, Que yo sepa, SQL Server no admite que le hagas un EXEC, de esta forma:

EXEC ('execute procedure proc_calcula_nuevodato (?,?,?,?)',@cliente_codigo,@producto_codigo,@fecha ,@dias)
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 13/10/2016, 10:37
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: OUTPUT Incomplento Utilizando Varible Table

El motor que utilizo es SQL Server 2014

Y si yo trabajo de esa manera los SP luego de la configuraciones necesarias, ejecuto SP de otro motor de esta forma.

Debo de entender que falta algun tipo de WHILE para ir iterando, pero como dije antes tengo otros que hacen casi lo mismo y funciona excepto este.

Quiza me orienta la forma de iterar en una variable Table de un SP que es lo que creo que me falta.

Gracias
  #4 (permalink)  
Antiguo 13/10/2016, 17:34
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: OUTPUT Incomplento Utilizando Varible Table

Estimados comentos mis avances para una mejor claridad.

ACtualmente mi SP esta de esta manera.

Código SQL:
Ver original
  1. CREATE PROCEDURE sp_test1
  2. (
  3.     @cliente_codigo CHAR(6),
  4.     @producto_codigo CHAR(2),
  5.     @fecha DATE,
  6.     @dias INT,
  7.     @vl_sucursal CHAR(3) OUTPUT,
  8.     @vl_cantidad INT OUTPUT,
  9.     @vl_valor1 DECIMAL(5,2) OUTPUT,
  10.     @vl_valor2 DECIMAL (5,2) OUTPUT
  11. )
  12. AS
  13. --SET XACT_ABORT, NOCOUNT ON
  14. CREATE TABLE #tmp
  15. (
  16.     id INT IDENTITY ,
  17.     vl_sucursal CHAR(6),
  18.     vl_cantidad INT,
  19.     vl_valor1 DECIMAL(5,2),
  20.     vl_valor2 DECIMAL(5,2)
  21. )
  22.  
  23. DECLARE @ROW INT = 1
  24.  
  25. INSERT INTO #tmp(vl_sucursal,vl_cantidad,vl_valor1,vl_valor2)
  26. EXEC ('execute procedure proc_calcula_nuevodato (?,?,?,?)',@cliente_codigo,@producto_codigo,@fecha,@dias) AT SERVIDOR1
  27.  
  28. WHILE @ROW <= (SELECT COUNT(*) FROM #tmp)
  29.     BEGIN
  30.        
  31.         SELECT @vl_sucursal=vl_sucursal,
  32.                  @vl_cantidad=vl_cantidad,
  33.                  @vl_valor1=vl_valor1,
  34.                  @vl_valor2=vl_valor2
  35.         FROM   #tmp
  36.         WHERE  id=@ROW
  37.        
  38.            --PRINT @vl_prov_codigo
  39.         --PRINT @vl_facmae_piezas
  40.         --PRINT @vl_valor_tarifa_2
  41.         --PRINT @vl_facmae_valfact
  42.  
  43.         SET @ROW = @ROW + 1;
  44.        
  45.     END
  46.  
  47. DROP TABLE #tmp
  48. GO

Como se observa he cambiado a un WHILE para tratar de recorrer los registros (NO se si es la forma correcta).

En el query analizer ejecuto esto:
Código SQL:
Ver original
  1. EXEC BDD.dbo.sp_test1 '000001','FF','07-02-2014',3,0,0,0,0

Pero no obtengo el listado que quiero solo obtengo el mensaje:
Código:
(2 row(s) affected)
Tengo dos registros que quiero mostrar, no se donde me estare quendando para que no funcione.

Los PRINT que hago si muestra la informacion pero no como quiero mostrar.

Agradecere cualquier aporte.

Última edición por jm_shinigami; 13/10/2016 a las 17:51
  #5 (permalink)  
Antiguo 15/10/2016, 16:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: OUTPUT Incomplento Utilizando Varible Table

simple y sencillo mi estimado, en el procedure tienes un select con una asignacion de variables lo cual no regresa informacion, sino que la informacion la estas almacenando en una variable para despues usarla, deberias de hacer esto:

Código SQL:
Ver original
  1. SELECT vl_sucursal,
  2.                  vl_cantidad,
  3.                  vl_valor1,
  4.                  vl_valor2
  5.         FROM   #tmp
  6.         WHERE  id=@ROW

ahi ya tendras el resultado esperado en pantalla :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 18/10/2016, 11:48
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: OUTPUT Incomplento Utilizando Varible Table

Excelente funciono al pelo!!

Etiquetas: output, sqlserver2008
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 11:27.