Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/11/2013, 05:54
miguelangel23
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 0
Optimizar Stored Procedure

Hola a todos, espero que se encuentren muy bien, mi consulta es la siguiente: Tengo un Stored Procedure que me han pedido optimizar. Este es:

Código SQL:
Ver original
  1. USE [TeamTemplate]
  2. GO
  3.  
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9. ALTER PROCEDURE [dbo].[Entity_SelectContact_pa]
  10.   @WorkorderID VARCHAR(10)
  11. , @WorkorderMod VARCHAR(5) = '00'
  12. , @FilterBy VARCHAR(15) = 'Team'
  13. , @SearchBy VARCHAR(50) = NULL
  14. , @band VARCHAR(3) = NULL
  15.  
  16. AS
  17.  
  18. SET NOCOUNT ON
  19.  
  20. IF @FilterBy = 'Team'
  21. SELECT @FilterBy = NULL
  22.  
  23. IF @SearchBy = '' OR @SearchBy = 'undefined'
  24. SELECT @SearchBy = NULL
  25.  
  26. IF @band = ''
  27. SELECT @band = NULL
  28.  
  29. IF @band IS NULL OR @band <> 'All' 
  30. BEGIN
  31.     IF ISNUMERIC(@FilterBy) = 1
  32.     BEGIN
  33.        
  34.         CREATE TABLE #VendorId
  35.         (
  36.             VendorId        INT
  37.         )  
  38.  
  39.         INSERT  INTO #VendorId
  40.         SELECT  q.VendorID
  41.         FROM    Quotes q
  42.                 INNER JOIN CostCode cc ON q.DefaultCC = cc.CostCodeID
  43.         WHERE   q.WorkorderID = @WorkorderID    AND q.QuoteStatus IN ('Draft','Committed','Closed') AND q.DefaultCC = @FilterBy
  44.  
  45.         INSERT  INTO #VendorId
  46.         SELECT  b.VendorID
  47.         FROM    buyout b
  48.                 INNER JOIN CostCode cc ON b.OrderCostCode = cc.CostCodeID
  49.         WHERE   WorkorderID = @WorkorderID  AND b.STATUS IN ('Draft','Committed','Executed','Closed')AND b.OrderCostCode    = @FilterBy
  50.  
  51.         SELECT  DISTINCT u.UserId,(e.ShortName +' - '+ u.FirstName +' '+ u.LastName) AS UserName,
  52.                 '('+ isnull(u.EmailAddress,'') + ')' AS EmailAddress, u.STATUS
  53.         FROM    Users u
  54.                 INNER JOIN Entity e         ON  u.EntityID  =   e.EntityID
  55.                 INNER JOIN Vendor v         ON  e.EntityID  =   v.EntityID
  56.         WHERE   u.EntityID IN   (  
  57.                                     SELECT  et.EntityID
  58.                                     FROM    EntityType et
  59.                                     WHERE   et.EntityID = e.EntityID AND et.EntityTypeName = 'Vendor' AND et.STATUS = 'on'
  60.                                 )   AND
  61.                 v.Vendor# IN ( SELECT DISTINCT VendorID FROM #VendorId )
  62.         ORDER   BY e.ShortName +' - '+ u.FirstName +' '+ u.LastName
  63.  
  64.         DROP TABLE #VendorId
  65.     END
  66.     ELSE
  67.     BEGIN
  68.         IF @FilterBy IS NULL OR @FilterBy <> 'All'
  69.         BEGIN
  70.             SELECT  DISTINCT u.UserID,(e.ShortName +' - '+ u.FirstName +' '+ u.LastName) AS UserName ,
  71.                     '('+ isnull(u.EmailAddress,'') + ')' AS EmailAddress, u.STATUS
  72.             FROM    Users u  
  73.                     INNER JOIN WorkorderTeam wt ON wt.UserID = u.UserID  
  74.                     INNER JOIN Entity e ON u.EntityID = e.EntityID  
  75.             WHERE   wt.WorkorderID = @WorkorderID  AND
  76.                     wt.WorkorderMod = @WorkorderMod AND
  77.                     wt.STATUS = 'show' AND
  78.                     (@FilterBy IS NULL OR wt.TeamMemberType = @FilterBy)  
  79.             ORDER   BY e.ShortName +' - '+ u.FirstName +' '+ u.LastName
  80.         END
  81.  
  82.         IF @FilterBy = 'All'
  83.         BEGIN
  84.             SELECT  u.UserId, (e.ShortName +' - '+ u.FirstName +' '+ u.LastName) AS UserName,
  85.                     '('+ isnull(u.EmailAddress,'') + ')' AS EmailAddress, u.STATUS
  86.             FROM    Users u
  87.                     INNER JOIN Entity e ON e.EntityID = u.EntityID
  88.             WHERE   u.EntityID IN   (
  89.                                         SELECT  et.EntityID
  90.                                         FROM    EntityType et
  91.                                         WHERE   et.EntityID = e.EntityID AND
  92.                                                 et.EntityTypeName IN ('Customer','Occupant','ThirdParty','Vendor','SP') AND
  93.                                                 et.STATUS = 'on'
  94.                                     )   AND
  95.                     (@SearchBy IS NULL OR e.ShortName +' - '+ u.FirstName +' '+ u.LastName LIKE '%' + @SearchBy + '%')
  96.             ORDER   BY u.FirstName, u.LastName
  97.         END
  98.     END
  99. END
  100.  
  101. IF @band = 'All'
  102. BEGIN
  103.     SELECT  u.UserId, (e.ShortName +' - '+ u.FirstName +' '+ u.LastName) AS UserName,'('+ isnull(u.EmailAddress,'') + ')' AS EmailAddress,u.STATUS
  104.     FROM    Users u
  105.             INNER JOIN Entity e ON e.EntityID = u.EntityID
  106.     WHERE   u.STATUS = 'on' AND
  107.             u.EntityID IN (SELECT et.EntityID FROM EntityType et WHERE et.EntityID = e.EntityID AND et.STATUS = 'on') AND
  108.             (@SearchBy IS NULL OR e.ShortName +' - '+ u.FirstName +' '+ u.LastName LIKE '%' + @SearchBy + '%')
  109.     ORDER   BY u.FirstName, u.LastName
  110. END

[/CODE]

Podrían decirme como puedo hacerlo más óptimo. Gracias.

Última edición por gnzsoloyo; 19/11/2013 a las 06:17 Razón: Mal etiquetado