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

Problemas con sp ayuda

Estas en el tema de Problemas con sp ayuda en el foro de SQL Server en Foros del Web. Tengo un problema con el sig store procedure, como puedo hacer para no tener q repetir y copiar tantas veces.. ya que funciona pero cuando ...
  #1 (permalink)  
Antiguo 22/11/2010, 10:24
Avatar de Inicia  
Fecha de Ingreso: octubre-2010
Ubicación: Actualmente en GDL
Mensajes: 135
Antigüedad: 13 años, 6 meses
Puntos: 1
Exclamación Problemas con sp ayuda

Tengo un problema con el sig store procedure, como puedo hacer para no tener q repetir y copiar tantas veces.. ya que funciona pero cuando lo jalo a algún reporte me crea errores...

Código SQL:
Ver original
  1. --- Exec P5rAdvBitAutor '05', ''
  2. CREATE Proc P5rAdvBitAutor
  3. (
  4. @Vendedor   utClave,
  5. @Folio      utFolio
  6. )
  7. AS
  8. SET nocount ON
  9.  
  10. IF isnull(@Vendedor,'') <> '' AND isnull(@Folio,'') <> ''
  11. BEGIN
  12.  
  13.     IF EXISTS (SELECT t.clientetipo FROM cliente t,  OrdVtaEncabezado x WHERE t.clave=x.cliente AND x.folio = @Folio AND clientetipo='DIST1')
  14. BEGIN
  15.  
  16.     SELECT   C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario, SUM((od.cantidad*ar.numero1)-(od.totalimpor
  17. te)) AS Descu, O.cliente, c.clientetipo
  18.     FROM    OrdVtaEncabezado AS O, cliente AS C, OrdVtaAutorizacion AS A,P5SysAutorizacion AS PA,ordvtadetalle AS od, articulo AS ar
  19.         WHERE   O.Empresa = 'Emp1'  AND C.clave = O.Cliente AND O.Operacion=PA.Operacion AND    O.Folio=PA.Folio AND    PA.Autorizado='S' AND O.Vendedor=@Vendedor AND  O.Folio=@Folio
  20.                 AND O.Operacion='ORDVTA'    AND O.Folio=A.FOlio AND PA.Operacion='ORDVTA' AND od.articulo=ar.clave AND od.folio=O.folio AND O.cliente=c.clave
  21. GROUP BY  O.cliente, c.clientetipo,C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario
  22.     ORDER BY O.Folio DESC, A.Fecha DESC
  23. END
  24. ELSE
  25. BEGIN
  26.  
  27. IF isnull(@Vendedor,'') <> '' AND isnull(@Folio,'') <> ''
  28. BEGIN
  29.     IF EXISTS (SELECT t.clientetipo FROM cliente t,  OrdVtaEncabezado x WHERE t.clave=x.cliente AND x.folio = @Folio AND clientetipo='DIST2')
  30. BEGIN
  31.  
  32.     SELECT   C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario, SUM((od.cantidad*ar.numero2)-(od.totalimpor
  33. te)) AS Descu, O.cliente, c.clientetipo
  34.     FROM    OrdVtaEncabezado AS O, cliente AS C, OrdVtaAutorizacion AS A,P5SysAutorizacion AS PA,ordvtadetalle AS od, articulo AS ar
  35.         WHERE   O.Empresa = 'Emp1'  AND C.clave = O.Cliente AND O.Operacion=PA.Operacion AND    O.Folio=PA.Folio AND    PA.Autorizado='S' AND O.Vendedor=@Vendedor AND  O.Folio=@Folio
  36.                 AND O.Operacion='ORDVTA'    AND O.Folio=A.FOlio AND PA.Operacion='ORDVTA' AND od.articulo=ar.clave AND od.folio=O.folio AND O.cliente=c.clave
  37. GROUP BY  O.cliente, c.clientetipo,C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario
  38.     ORDER BY O.Folio DESC, A.Fecha DESC
  39. END
  40. ELSE
  41. BEGIN
  42. IF isnull(@Vendedor,'') <> '' AND isnull(@Folio,'') <> ''
  43. BEGIN
  44.     IF EXISTS (SELECT t.clientetipo FROM cliente t,  OrdVtaEncabezado x WHERE t.clave=x.cliente AND x.folio = @Folio AND clientetipo='DIST3')
  45. BEGIN
  46.     SELECT   C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario, SUM((od.cantidad*ar.numero3)-(od.totalimpor
  47. te)) AS Descu, O.cliente, c.clientetipo
  48.     FROM    OrdVtaEncabezado AS O, cliente AS C, OrdVtaAutorizacion AS A,P5SysAutorizacion AS PA,ordvtadetalle AS od, articulo AS ar
  49.         WHERE   O.Empresa = 'Emp1'  AND C.clave = O.Cliente AND O.Operacion=PA.Operacion AND    O.Folio=PA.Folio AND    PA.Autorizado='S' AND O.Vendedor=@Vendedor AND  O.Folio=@Folio
  50.                 AND O.Operacion='ORDVTA'    AND O.Folio=A.FOlio AND PA.Operacion='ORDVTA' AND od.articulo=ar.clave AND od.folio=O.folio AND O.cliente=c.clave
  51. GROUP BY  O.cliente, c.clientetipo,C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario
  52.     ORDER BY O.Folio DESC, A.Fecha DESC
  53. END
  54.  
  55.  
  56. END
  57. ELSE
  58. BEGIN
  59.     IF isnull(@Vendedor,'') <> ''
  60.     BEGIN
  61.     IF EXISTS (SELECT t.clientetipo FROM cliente t,  OrdVtaEncabezado x WHERE t.clave=x.cliente AND x.folio = @Folio AND clientetipo='DIST1')
  62.  
  63.     SELECT   C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario, SUM((od.cantidad*ar.numero1)-(od.totalimpor
  64. te)) AS Descu, O.cliente, c.clientetipo
  65.     FROM    OrdVtaEncabezado AS O, cliente AS C, OrdVtaAutorizacion AS A,P5SysAutorizacion AS PA,ordvtadetalle AS od, articulo AS ar
  66.         WHERE   O.Empresa = 'Emp1'  AND C.clave = O.Cliente AND O.Operacion=PA.Operacion AND    O.Folio=PA.Folio AND    PA.Autorizado='S' AND O.Vendedor=@Vendedor AND  O.Folio=@Folio
  67.                 AND O.Operacion='ORDVTA'    AND O.Folio=A.FOlio AND PA.Operacion='ORDVTA' AND od.articulo=ar.clave AND od.folio=O.folio AND O.cliente=c.clave
  68. GROUP BY  O.cliente, c.clientetipo,C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario
  69.     ORDER BY O.Folio DESC, A.Fecha DESC
  70. END
  71. ELSE
  72. BEGIN
  73.     IF isnull(@Vendedor,'') <> ''
  74.     BEGIN
  75.     IF EXISTS (SELECT t.clientetipo FROM cliente t,  OrdVtaEncabezado x WHERE t.clave=x.cliente AND x.folio = @Folio AND clientetipo='DIST2')
  76. BEGIN
  77.  
  78.     SELECT   C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario, SUM((od.cantidad*ar.numero2)-(od.totalimpor
  79. te)) AS Descu, O.cliente, c.clientetipo
  80.     FROM    OrdVtaEncabezado AS O, cliente AS C, OrdVtaAutorizacion AS A,P5SysAutorizacion AS PA,ordvtadetalle AS od, articulo AS ar
  81.         WHERE   O.Empresa = 'Emp1'  AND C.clave = O.Cliente AND O.Operacion=PA.Operacion AND    O.Folio=PA.Folio AND    PA.Autorizado='S' AND O.Vendedor=@Vendedor AND  O.Folio=@Folio
  82.                 AND O.Operacion='ORDVTA'    AND O.Folio=A.FOlio AND PA.Operacion='ORDVTA' AND od.articulo=ar.clave AND od.folio=O.folio AND O.cliente=c.clave
  83. GROUP BY  O.cliente, c.clientetipo,C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario
  84.     ORDER BY O.Folio DESC, A.Fecha DESC
  85. END
  86. ELSE
  87. BEGIN
  88.     IF isnull(@Vendedor,'') <> ''
  89.     BEGIN
  90.     IF EXISTS (SELECT t.clientetipo FROM cliente t,  OrdVtaEncabezado x WHERE t.clave=x.cliente AND x.folio = @Folio AND clientetipo='DIST3')
  91. BEGIN
  92.     SELECT   C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario, SUM((od.cantidad*ar.numero3)-(od.totalimpor
  93. te)) AS Descu, O.cliente, c.clientetipo
  94.     FROM    OrdVtaEncabezado AS O, cliente AS C, OrdVtaAutorizacion AS A,P5SysAutorizacion AS PA,ordvtadetalle AS od, articulo AS ar
  95.         WHERE   O.Empresa = 'Emp1'  AND C.clave = O.Cliente AND O.Operacion=PA.Operacion AND    O.Folio=PA.Folio AND    PA.Autorizado='S' AND O.Vendedor=@Vendedor AND  O.Folio=@Folio
  96.                 AND O.Operacion='ORDVTA'    AND O.Folio=A.FOlio AND PA.Operacion='ORDVTA' AND od.articulo=ar.clave AND od.folio=O.folio AND O.cliente=c.clave
  97. GROUP BY  O.cliente, c.clientetipo,C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario
  98.     ORDER BY O.Folio DESC, A.Fecha DESC
  99. END
  100.     END
  101. ....ETC SE REPITE OTRA VEZ
lo unico que cambia es el distribuidor y la formula por el artículo, espero me puedan ayudar
  #2 (permalink)  
Antiguo 23/11/2010, 12:06
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: Problemas con sp ayuda

Sip esta sencillo tu problema, porque no creas un query dinamico y nada mas le mandas como parametro el campo que cambia:

Código SQL:
Ver original
  1. CREATE Proc P5rAdvBitAutor
  2. (
  3. @Vendedor   utClave,
  4. @Folio      utFolio,
  5. @tipo VARCHAR(20)
  6. )
  7. AS
  8. SET nocount ON
  9.  
  10. DECLARE @query VARCHAR(MAX)
  11.  
  12. SET @query='SELECT   C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario, sum((od.cantidad*ar. + ' @tipo '+)-(od.totalimpor
  13. te)) AS Descu, O.cliente, c.clientetipo
  14.    FROM    OrdVtaEncabezado AS O, cliente AS C, OrdVtaAutorizacion AS A,P5SysAutorizacion AS PA,ordvtadetalle AS od, articulo AS ar
  15.        WHERE   O.Empresa = ''Emp1''  AND C.clave = O.Cliente AND O.Operacion=PA.Operacion AND    O.Folio=PA.Folio AND    PA.Autorizado=''S'' AND O.Vendedor=@Vendedor AND  O.Folio=@Folio
  16.                AND O.Operacion=''ORDVTA''    AND O.Folio=A.FOlio AND PA.Operacion=''ORDVTA'' AND od.articulo=ar.clave AND od.folio=O.folio AND O.cliente=c.clave
  17. GROUP BY  O.cliente, c.clientetipo,C.razonsocial, O.Folio, O.Cliente,  A.Fecha,  O.UsuarioCaptura,  O.Documento,O.Vendedor,O.TotalImporte,O.TotalDescuento,O.TotalImpuesto,O.TotalRetencion,O.Total,A.Autorizacion, PA.Autorizado, A.Usuario
  18.    ORDER BY O.Folio DESC, A.Fecha DESC
  19. '
  20. EXEC @query
  21.  
  22. Donde tipo es lo que pones como od.cantidad*ar.numero1, ar.numero2 etc, aqui lo que pondrias seria numero1 o numero 2.....
  #3 (permalink)  
Antiguo 23/11/2010, 12:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con sp ayuda

En lugar de utilizar EXEC @query, cambialo por EXEC SP_EXECUTESQL @Variable
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 23/11/2010, 18:11
Avatar de Inicia  
Fecha de Ingreso: octubre-2010
Ubicación: Actualmente en GDL
Mensajes: 135
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Problemas con sp ayuda

Ahhh muy bien gracias me sirvio mucho =)

Etiquetas: Ninguno
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 04:55.