Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/06/2009, 09:50
sanref
 
Fecha de Ingreso: mayo-2004
Mensajes: 189
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: IF en Store Procedure

Código [code]:
Ver original
  1. ALTER PROCEDURE [dbo].[ArticulosPedidosCliente]  
  2.     @IdSuc      int = 0,
  3.         @Stock      int = 0
  4. AS
  5.     SELECT DISTINCT id_articulo, nombre, codigo, stock
  6.     FROM (
  7.             SELECT DISTINCT a.id_articulo, a.nombre, ap.codigo, isnull(asu.stock,0) as stock,
  8.             ROW_NUMBER() OVER (
  9.                                 ORDER BY
  10.                                     CASE    WHEN UPPER(@OrderBy) = 'PADRE' AND UPPER(@OrderSort) = 'ASC' THEN padre
  11.                                     END ASC,
  12.                                     CASE    WHEN UPPER(@OrderBy) = 'PADRE' AND UPPER(@OrderSort) = 'DESC' THEN padre
  13.                                     END DESC,
  14.                                     CASE    WHEN UPPER(@OrderBy) = 'RAZONSOCIAL' AND UPPER(@OrderSort) = 'ASC' THEN razonSocial
  15.                                     END ASC,
  16.                                     CASE    WHEN UPPER(@OrderBy) = 'RAZONSOCIAL' AND UPPER(@OrderSort) = 'DESC' THEN razonSocial
  17.                                     END DESC,
  18.                                     CASE    WHEN UPPER(@OrderBy) = 'NOMBRE' AND UPPER(@OrderSort) = 'ASC' THEN nombre
  19.                                     END ASC,
  20.                                     CASE    WHEN UPPER(@OrderBy) = 'NOMBRE' AND UPPER(@OrderSort) = 'DESC' THEN nombre
  21.                                     END DESC
  22.                                 ) AS RowNumber
  23.             FROM ARTICULO a JOIN ARTICULO_PROVEEDOR ap ON a.id_articulo = ap.id_articulo
  24.                  JOIN LINEA l ON a.id_linea = l.id_linea
  25.                  JOIN PROVEEDOR p ON ap.id_proveedor = p.id_proveedor
  26.                  LEFT JOIN ARTICULO_SUCURSAL asu ON a.id_articulo = asu.id_articulo AND asu.stock >= @Stock
  27.             WHERE
  28.                   asu.id_sucursal = CASE WHEN @IdSuc <> 0 THEN @IdSuc
  29.                                  ELSE asu.id_sucursal
  30.                                  END
  31.     ) AS Articulo  
  32.     WHERE RowNumber BETWEEN @PageSize * @PageNumber + 1
  33.                     AND @PageSize * (@PageNumber + 1)
Es un store procedure para paginacion de resultados.

El tema del stock esta mas o menos solucionado, pero tengo el mismo problema con el parametro "sucursal"; porque puedo filtrar o no los articulos por sucursal, si filtro por sucursal debo poner una clausula en el WHERE, si no, no. Y con lo que tengo actualmente me obliga a poner si o si una clausula en el WHERE, con lo que rompe mi LEFT JOIN ARTICULO_SUCURSAL.

Si no se entiende algo, aca estoy para despejar dudas
Saludos
__________________
Nadie nacío sabiendo...