none
Procedure muito lenta RRS feed

  • Pergunta

  • Boa tarde,

    Estou com um problema com performance de procedure, tenho duas procedures que tem uma estrutura muito parecida, o nomes delas é sp_forecast_semovos e sp_forecast_ovos, decidi separar em duas pois estava tendo problemas de performance e achei que resolveria o problema mas não resolveu, vou postar uma delas e explico a diferença logo abaixo:

    ALTER PROCEDURE [dbo].[SP_FORECAST_SEMOVOS] (@PERIODO INT, @ANOMES1 INT, @ANOMES2 INT, @ANOMES3 INT, @ANOMES4 INT, @ANOMES5 INT, @TIPO_CANAL VARCHAR(20), @MARCA VARCHAR(3))
    WITH RECOMPILE
    AS
    BEGIN
    	DECLARE @TIPO_CANAL_STR VARCHAR(30)
    	DECLARE @MARCA_STR VARCHAR(30)
    	DECLARE @SQL NVARCHAR(4000)
    	DECLARE @GRUPO_PRODUTO VARCHAR(50)	
    	DECLARE @PARAMETROS NVARCHAR(4000)
    	DECLARE @TIPO_CANAL1 VARCHAR(20)
    	DECLARE @MARCA_TEMP VARCHAR(3)
    
    	SET @TIPO_CANAL1 = @TIPO_CANAL
    	SET @MARCA_TEMP = @MARCA
    		
    	IF @TIPO_CANAL1 <> 'TODOS'
    		BEGIN
    			SET @TIPO_CANAL_STR = ' AND R.Tipo_Canal = ' +  CHAR(39) + @TIPO_CANAL1 + CHAR(39) + ' '
    		END
    	ELSE
    		BEGIN
    			SET @TIPO_CANAL_STR = ' '
    		END
    
    	IF @MARCA_TEMP <> '99'
    		BEGIN
    			SET @MARCA_STR = ' AND M.CODSAP_MARCA = ' + CHAR(39) + @MARCA_TEMP + CHAR(39) + ' ' 
    		END
    	ELSE
    		BEGIN
    			SET @MARCA_STR = ' '
    		END
    
    	SET @SQL =
    	'	
    	INSERT INTO FORECAST.Hist_Hierarq_Para_Representatividade
    	SELECT
    	T1.CANAL,
    	T1.PERIODO,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE,
    	CASE WHEN SUM(T1.VOL) < 0 THEN 0 ELSE SUM(T1.VOL) END AS VOLUME_KG,
    	CASE WHEN SUM(T1.FNET) < 0 THEN 0 ELSE SUM(T1.FNET) END AS NETSALES
    	FROM(
    	SELECT
    	T.CANAL,
        @PERIODO1 AS PERIODO,
    	T.GRUPO_PRODUTO,
    	T.MARKET_SEGMENT,
    	T.CODSAP_MARCA,
    	T.CODSAP_PRODUCTSEGMENT,
    	T.CODSAP_PRODUCTLINE,
    	CASE WHEN T.VOLUME < 0 THEN 0 ELSE T.VOLUME END AS VOL,
    	CASE WHEN T.NET < 0 THEN 0 ELSE T.NET END AS FNET			
    		FROM(
    		 SELECT 
    		  CCR.CODIGOCANALVENDA AS CANAL,
    		  GP.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    		  MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		  CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		  
    		  PS.CODSAP_PRODUCTSEGMENT,
    		  PL.CODSAP_PRODUCTLINE,
    		  V.CODSAP_CLIENTE,
    		  V.CODSAP_ITEMPRODUTO,
    		  CASE WHEN SUM(V.VOLUME_FINAL) < 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME,
    		  CASE WHEN SUM(V.Valor_Liquido_Calculado) < 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET	  
    		 FROM VOLUME_ITEM V
    		  INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		  INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		  INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		  INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		  INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		  INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		  INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		  INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		  INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		  INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		  INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		  INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) ' + @TIPO_CANAL_STR + @MARCA_STR +	  
    		 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN (' + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39) +')
    		 GROUP BY
    		  CCR.CODIGOCANALVENDA,
    		  GP.CODSAP_GRUPOPRODUTO,
    		  MS.CODSAP_MARKETSEGMENT,
    		  M.CODSAP_MARCA,
    		  PS.CODSAP_PRODUCTSEGMENT,
    		  PL.CODSAP_PRODUCTLINE,
    		  V.CODSAP_CLIENTE,
    		  V.CODSAP_ITEMPRODUTO
    		) AS T
    	) AS T1
    	GROUP BY
    	T1.CANAL,
    	T1.PERIODO,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE		
    	'
    	SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)'
    	
    	EXEC SP_EXECUTESQL @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,  @ANOMES11 = @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3, @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5,  @MARCA1 =  @MARCA
    	PRINT @SQL
    
    	SET @SQL =
    	'
    	INSERT INTO FORECAST.Hist_Cli_Para_Representatividade 
    	SELECT
    	T2.CANAL,
    	T2.PERIODO,
    	T2.GRUPO_PRODUTO, 
    	T2.MARKET_SEGMENT,
    	T2.CODSAP_MARCA,
    	T2.CODSAP_PRODUCTSEGMENT,
    	T2.CODSAP_PRODUCTLINE,
    	T2.CODSAP_CLIENTE,
    	T2.VOLUME_KG,
    	CASE WHEN HI.VOLUME_KG = 0 THEN 0 ELSE T2.VOLUME_KG/HI.VOLUME_KG END AS REP,
    	CASE WHEN HI.NETSALES= 0 THEN 0 ELSE T2.NETSALES/HI.NETSALES END AS REP_NETSALES,
    	T2.NETSALES
    	FROM(
    	 SELECT
    	 T1.CANAL,
    	 @PERIODO1 AS PERIODO,
    	 T1.GRUPO_PRODUTO, 
    	 T1.MARKET_SEGMENT,
    	 T1.CODSAP_MARCA,
    	 T1.CODSAP_PRODUCTSEGMENT,
    	 T1.CODSAP_PRODUCTLINE,
    	 T1.CODSAP_CLIENTE,
    	 CASE WHEN T1.VOLUME_KG = 0 THEN  0 ELSE  T1.VOLUME_KG END AS VOLUME_KG,
    	 CASE WHEN T1.FNETSALES = 0 THEN  0 ELSE  T1.FNETSALES END AS NETSALES
    	 FROM(
    	  SELECT
    	 T.CANAL,
    	  T.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    	  T.MARKET_SEGMENT,
    	  T.CODSAP_MARCA,
    	  T.CODSAP_PRODUCTSEGMENT,
    	  T.CODSAP_PRODUCTLINE,
    	  T.CODSAP_CLIENTE,
    	  SUM(T.VOLUME) AS VOLUME_KG,
    	  SUM(T.NET) AS FNETSALES
    	  FROM(
    	   SELECT 
    		CCR.CODIGOCANALVENDA AS CANAL,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		 
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO,
    		CASE WHEN SUM(V.VOLUME_FINAL) < 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME ,
    		CASE WHEN SUM(V.Valor_Liquido_Calculado) < 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET
    	   FROM
    		VOLUME_ITEM V
    		INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) ' + @TIPO_CANAL_STR + @MARCA_STR +	  
    		 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN (' + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39) +')
    	   GROUP BY
    		CCR.CODIGOCANALVENDA,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT,
    		M.CODSAP_MARCA,
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO
    	  ) AS T
    	 GROUP BY
    	 T.CANAL,
    	 T.CODSAP_GRUPOPRODUTO,
    	 T.MARKET_SEGMENT,
    	 T.CODSAP_MARCA,
    	 T.CODSAP_PRODUCTSEGMENT,
    	 T.CODSAP_PRODUCTLINE,
    	 T.CODSAP_CLIENTE
    	 ) AS T1
    	)T2 
    	INNER JOIN
    	FORECAST.Hist_Hierarq_Para_Representatividade HI ON
    	HI.GRUPO_PRODUTO = T2.GRUPO_PRODUTO AND
    	HI.MARKET_SEGMENT = T2.MARKET_SEGMENT AND
    	HI.CODSAP_MARCA = T2.CODSAP_MARCA AND
    	HI.CODSAP_PRODUCTSEGMENT = T2.CODSAP_PRODUCTSEGMENT AND
    	HI.CODSAP_PRODUCTLINE    = T2.CODSAP_PRODUCTLINE AND
    	HI.PERIODO = T2.PERIODO AND
    	HI.CANAL = T2.CANAL	
    	'
    	
    
        SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)'
    	--PRINT @SQL
    	
    	EXEC SP_EXECUTESQL @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,  @ANOMES11 =  @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3, @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5,  @MARCA1 =  @MARCA
    	
    
    		SET @SQL =
    	'	
    	INSERT INTO FORECAST.HIST_FORECAST 
    	SELECT
    	T1.CANAL,
    	T1.PERIODO,
    	T1.TIPO_CANAL,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE,
    	T1.CODSAP_CLIENTE,
    	T1.CODSAP_ITEMPRODUTO,
    	T1.VOLUME_KG,
    	HI.REP AS REP_CLIENTE_NA_HIERARQUIA,
    	CASE WHEN HI.VOLUME_KG = 0 THEN 0 ELSE T1.VOLUME_KG/HI.VOLUME_KG END AS REP_SKU_NO_CLIENTE,
    	CASE WHEN HI.NETSALES = 0 THEN 0 ELSE T1.NETSALES/HI.NETSALES END AS REP_SKU_NO_CLIENTE_NETSALES
    	FROM(
    		SELECT
    		T.CANAL, 
    		@PERIODO1 AS PERIODO,
    		T.TIPO_CANAL,
    		T.GRUPO_PRODUTO,
    		T.MARKET_SEGMENT,
    		T.CODSAP_MARCA,
    		T.CODSAP_PRODUCTSEGMENT,
    		T.CODSAP_PRODUCTLINE,
    		T.CODSAP_CLIENTE,
    		T.CODSAP_ITEMPRODUTO,
    		T.VOLUME AS VOLUME_KG,
    	T.NET AS NETSALES
    		FROM(
    		SELECT
    		CCR.CODIGOCANALVENDA AS CANAL, 
    		R.TIPO_CANAL,
    		GP.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    		MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO,
    		CASE WHEN SUM(V.VOLUME_FINAL) <= 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME,
    		CASE WHEN SUM(V.Valor_Liquido_Calculado) <= 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET
    		FROM
    		VOLUME_ITEM V
    		INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) ' + @TIPO_CANAL_STR + @MARCA_STR +	  
    		 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN (' + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39) +')
    		GROUP BY
    		CCR.CODIGOCANALVENDA,
    		R.TIPO_CANAL,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT,
    		M.CODSAP_MARCA,
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO 
    		) AS T
    	)T1
    	INNER JOIN FORECAST.Hist_Cli_Para_Representatividade HI ON
    	HI.GRUPO_PRODUTO = T1.GRUPO_PRODUTO AND
    	HI.MARKET_SEGMENT = T1.MARKET_SEGMENT AND
    	HI.CODSAP_MARCA = T1.CODSAP_MARCA   AND
    	HI.CODSAP_PRODUCTSEGMENT = T1.CODSAP_PRODUCTSEGMENT AND
    	HI.CODSAP_PRODUCTLINE    = T1.CODSAP_PRODUCTLINE  AND
    	HI.CODSAP_CLIENTE = T1.CODSAP_CLIENTE AND
    	HI.PERIODO = T1.PERIODO AND 
    	HI.CANAL = T1.CANAL	
    	'
    
    	SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)'
    	--PRINT @SQL
    	
    	EXEC SP_EXECUTESQL @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,  @ANOMES11 =  @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3, @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5,  @MARCA1 =  @MARCA
    	
    END
    

    A diferença da outra procedure é a clausula where que é da seguinte maneira:

     WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO = ' + CHAR(39) + '02' + CHAR(39) + '

    Já li sobre parametro sniffing e já executei varias tentativas pra arrumar essa procedure como usar with recompile, option(recompile) e variaveis locais, o problema ocorre quando eu executo a procedure sp_forecast_semovos e logo em seguida executo a procedure sp_forcast_ovos, a consulta demora uma eternidade pra terminar, passa de 16 minutos, as vezes ela roda em questao de segundos mas quando tento executar ela apos ter executado a outra ocorre essa demora.

    alguem já passou por algum problema parecido?


    segunda-feira, 14 de agosto de 2017 17:33

Respostas

  • Bom dia ,  vc consegue os paramentos da procedure ??

    siga esses passos na sua maquina, para avaliar uma possível criação de índice. 

    1) limpe o cache do seu sql 

    CHECKPOINT ;
    GO
    -- Limpa buffers (comandos add-hoc)
     DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS ; -- deleta o cache da query 
     GO
      DBCC  FREEPROCCACHE WITH NO_INFOMSGS; --deleta o plano execução ja feito
      GO
      DBCC FREESESSIONCACHE WITH NO_INFOMSGS
      GO

    2) Execute sua procedure com os parâmetros dessa forma ,primeiro vc comenta o comando de criação, depois declara as variáveis ,que são passadas por parâmetro e coloque os valores nelas. 

    seque um exemplo;

    OBS : quando for executar a sua sp inclua o plano de execução atual (CTRL +M)

    e veja se aparece algum pedido de criação de índice.

    ALTER PROCEDURE [dbo].[SP_FORECAST_SEMOVOS]
    --    (
    --      @PERIODO INT ,
    --      @ANOMES1 INT ,
    --      @ANOMES2 INT ,
    --      @ANOMES3 INT ,
    --      @ANOMES4 INT ,
    --      @ANOMES5 INT ,
    --      @TIPO_CANAL VARCHAR(20) ,
    --      @MARCA VARCHAR(3)
    --    )
    --    WITH RECOMPILE
    --AS
    
    /*##########################*/
    	DECLARE @PERIODO INT,
          @ANOMES1 INT ,
          @ANOMES2 INT ,
          @ANOMES3 INT ,
          @ANOMES4 INT ,
          @ANOMES5 INT ,
          @TIPO_CANAL VARCHAR(20) ,
          @MARCA VARCHAR(3);
    
          SELECT    @PERIODO  =??, --Coloque os paramentros que são pasados para a procedure
                    @ANOMES1 =??,
                    @ANOMES2 =??,
                    @ANOMES3 =??,
                    @ANOMES4 =??,
                    @ANOMES5 =??,
                    @TIPO_CANAL ,
                    @MARCA;
    
    /*##########################*/
    
        BEGIN
            DECLARE @TIPO_CANAL_STR VARCHAR(30);
            DECLARE @MARCA_STR VARCHAR(30);
            DECLARE @SQL NVARCHAR(4000);
            DECLARE @GRUPO_PRODUTO VARCHAR(50);	
            DECLARE @PARAMETROS NVARCHAR(4000);
            DECLARE @TIPO_CANAL1 VARCHAR(20);
            DECLARE @MARCA_TEMP VARCHAR(3);
    
            SET @TIPO_CANAL1 = @TIPO_CANAL;
            SET @MARCA_TEMP = @MARCA;
    		
            IF @TIPO_CANAL1 <> 'TODOS'
                BEGIN
                    SET @TIPO_CANAL_STR = ' AND R.Tipo_Canal = ' + CHAR(39)
                        + @TIPO_CANAL1 + CHAR(39) + ' ';
                END;
            ELSE
                BEGIN
                    SET @TIPO_CANAL_STR = ' ';
                END;
    
            IF @MARCA_TEMP <> '99'
                BEGIN
                    SET @MARCA_STR = ' AND M.CODSAP_MARCA = ' + CHAR(39)
                        + @MARCA_TEMP + CHAR(39) + ' '; 
                END;
            ELSE
                BEGIN
                    SET @MARCA_STR = ' ';
                END;
    
            SET @SQL = '	
    	INSERT INTO FORECAST.Hist_Hierarq_Para_Representatividade
    	SELECT
    	T1.CANAL,
    	T1.PERIODO,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE,
    	CASE WHEN SUM(T1.VOL) < 0 THEN 0 ELSE SUM(T1.VOL) END AS VOLUME_KG,
    	CASE WHEN SUM(T1.FNET) < 0 THEN 0 ELSE SUM(T1.FNET) END AS NETSALES
    	FROM(
    	SELECT
    	T.CANAL,
        @PERIODO1 AS PERIODO,
    	T.GRUPO_PRODUTO,
    	T.MARKET_SEGMENT,
    	T.CODSAP_MARCA,
    	T.CODSAP_PRODUCTSEGMENT,
    	T.CODSAP_PRODUCTLINE,
    	CASE WHEN T.VOLUME < 0 THEN 0 ELSE T.VOLUME END AS VOL,
    	CASE WHEN T.NET < 0 THEN 0 ELSE T.NET END AS FNET			
    		FROM(
    		 SELECT 
    		  CCR.CODIGOCANALVENDA AS CANAL,
    		  GP.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    		  MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		  CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		  
    		  PS.CODSAP_PRODUCTSEGMENT,
    		  PL.CODSAP_PRODUCTLINE,
    		  V.CODSAP_CLIENTE,
    		  V.CODSAP_ITEMPRODUTO,
    		  CASE WHEN SUM(V.VOLUME_FINAL) < 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME,
    		  CASE WHEN SUM(V.Valor_Liquido_Calculado) < 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET	  
    		 FROM VOLUME_ITEM V
    		  INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		  INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		  INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		  INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		  INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		  INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		  INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		  INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		  INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		  INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		  INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		  INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) '
                + @TIPO_CANAL_STR + @MARCA_STR
                + 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN ('
                + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39)
                + ')
    		 GROUP BY
    		  CCR.CODIGOCANALVENDA,
    		  GP.CODSAP_GRUPOPRODUTO,
    		  MS.CODSAP_MARKETSEGMENT,
    		  M.CODSAP_MARCA,
    		  PS.CODSAP_PRODUCTSEGMENT,
    		  PL.CODSAP_PRODUCTLINE,
    		  V.CODSAP_CLIENTE,
    		  V.CODSAP_ITEMPRODUTO
    		) AS T
    	) AS T1
    	GROUP BY
    	T1.CANAL,
    	T1.PERIODO,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE		
    	';
            SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)';
    	
            EXEC sp_executesql @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,
                @ANOMES11 = @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3,
                @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5, @MARCA1 = @MARCA;
            PRINT @SQL;
    
            SET @SQL = '
    	INSERT INTO FORECAST.Hist_Cli_Para_Representatividade 
    	SELECT
    	T2.CANAL,
    	T2.PERIODO,
    	T2.GRUPO_PRODUTO, 
    	T2.MARKET_SEGMENT,
    	T2.CODSAP_MARCA,
    	T2.CODSAP_PRODUCTSEGMENT,
    	T2.CODSAP_PRODUCTLINE,
    	T2.CODSAP_CLIENTE,
    	T2.VOLUME_KG,
    	CASE WHEN HI.VOLUME_KG = 0 THEN 0 ELSE T2.VOLUME_KG/HI.VOLUME_KG END AS REP,
    	CASE WHEN HI.NETSALES= 0 THEN 0 ELSE T2.NETSALES/HI.NETSALES END AS REP_NETSALES,
    	T2.NETSALES
    	FROM(
    	 SELECT
    	 T1.CANAL,
    	 @PERIODO1 AS PERIODO,
    	 T1.GRUPO_PRODUTO, 
    	 T1.MARKET_SEGMENT,
    	 T1.CODSAP_MARCA,
    	 T1.CODSAP_PRODUCTSEGMENT,
    	 T1.CODSAP_PRODUCTLINE,
    	 T1.CODSAP_CLIENTE,
    	 CASE WHEN T1.VOLUME_KG = 0 THEN  0 ELSE  T1.VOLUME_KG END AS VOLUME_KG,
    	 CASE WHEN T1.FNETSALES = 0 THEN  0 ELSE  T1.FNETSALES END AS NETSALES
    	 FROM(
    	  SELECT
    	 T.CANAL,
    	  T.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    	  T.MARKET_SEGMENT,
    	  T.CODSAP_MARCA,
    	  T.CODSAP_PRODUCTSEGMENT,
    	  T.CODSAP_PRODUCTLINE,
    	  T.CODSAP_CLIENTE,
    	  SUM(T.VOLUME) AS VOLUME_KG,
    	  SUM(T.NET) AS FNETSALES
    	  FROM(
    	   SELECT 
    		CCR.CODIGOCANALVENDA AS CANAL,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		 
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO,
    		CASE WHEN SUM(V.VOLUME_FINAL) < 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME ,
    		CASE WHEN SUM(V.Valor_Liquido_Calculado) < 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET
    	   FROM
    		VOLUME_ITEM V
    		INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) '
                + @TIPO_CANAL_STR + @MARCA_STR
                + 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN ('
                + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39)
                + ')
    	   GROUP BY
    		CCR.CODIGOCANALVENDA,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT,
    		M.CODSAP_MARCA,
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO
    	  ) AS T
    	 GROUP BY
    	 T.CANAL,
    	 T.CODSAP_GRUPOPRODUTO,
    	 T.MARKET_SEGMENT,
    	 T.CODSAP_MARCA,
    	 T.CODSAP_PRODUCTSEGMENT,
    	 T.CODSAP_PRODUCTLINE,
    	 T.CODSAP_CLIENTE
    	 ) AS T1
    	)T2 
    	INNER JOIN
    	FORECAST.Hist_Hierarq_Para_Representatividade HI ON
    	HI.GRUPO_PRODUTO = T2.GRUPO_PRODUTO AND
    	HI.MARKET_SEGMENT = T2.MARKET_SEGMENT AND
    	HI.CODSAP_MARCA = T2.CODSAP_MARCA AND
    	HI.CODSAP_PRODUCTSEGMENT = T2.CODSAP_PRODUCTSEGMENT AND
    	HI.CODSAP_PRODUCTLINE    = T2.CODSAP_PRODUCTLINE AND
    	HI.PERIODO = T2.PERIODO AND
    	HI.CANAL = T2.CANAL	
    	';
    	
    
            SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)';
    	--PRINT @SQL
    	
            EXEC sp_executesql @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,
                @ANOMES11 = @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3,
                @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5, @MARCA1 = @MARCA;
    	
    
            SET @SQL = '	
    	INSERT INTO FORECAST.HIST_FORECAST 
    	SELECT
    	T1.CANAL,
    	T1.PERIODO,
    	T1.TIPO_CANAL,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE,
    	T1.CODSAP_CLIENTE,
    	T1.CODSAP_ITEMPRODUTO,
    	T1.VOLUME_KG,
    	HI.REP AS REP_CLIENTE_NA_HIERARQUIA,
    	CASE WHEN HI.VOLUME_KG = 0 THEN 0 ELSE T1.VOLUME_KG/HI.VOLUME_KG END AS REP_SKU_NO_CLIENTE,
    	CASE WHEN HI.NETSALES = 0 THEN 0 ELSE T1.NETSALES/HI.NETSALES END AS REP_SKU_NO_CLIENTE_NETSALES
    	FROM(
    		SELECT
    		T.CANAL, 
    		@PERIODO1 AS PERIODO,
    		T.TIPO_CANAL,
    		T.GRUPO_PRODUTO,
    		T.MARKET_SEGMENT,
    		T.CODSAP_MARCA,
    		T.CODSAP_PRODUCTSEGMENT,
    		T.CODSAP_PRODUCTLINE,
    		T.CODSAP_CLIENTE,
    		T.CODSAP_ITEMPRODUTO,
    		T.VOLUME AS VOLUME_KG,
    	T.NET AS NETSALES
    		FROM(
    		SELECT
    		CCR.CODIGOCANALVENDA AS CANAL, 
    		R.TIPO_CANAL,
    		GP.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    		MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO,
    		CASE WHEN SUM(V.VOLUME_FINAL) <= 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME,
    		CASE WHEN SUM(V.Valor_Liquido_Calculado) <= 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET
    		FROM
    		VOLUME_ITEM V
    		INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) '
                + @TIPO_CANAL_STR + @MARCA_STR
                + 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN ('
                + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39)
                + ')
    		GROUP BY
    		CCR.CODIGOCANALVENDA,
    		R.TIPO_CANAL,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT,
    		M.CODSAP_MARCA,
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO 
    		) AS T
    	)T1
    	INNER JOIN FORECAST.Hist_Cli_Para_Representatividade HI ON
    	HI.GRUPO_PRODUTO = T1.GRUPO_PRODUTO AND
    	HI.MARKET_SEGMENT = T1.MARKET_SEGMENT AND
    	HI.CODSAP_MARCA = T1.CODSAP_MARCA   AND
    	HI.CODSAP_PRODUCTSEGMENT = T1.CODSAP_PRODUCTSEGMENT AND
    	HI.CODSAP_PRODUCTLINE    = T1.CODSAP_PRODUCTLINE  AND
    	HI.CODSAP_CLIENTE = T1.CODSAP_CLIENTE AND
    	HI.PERIODO = T1.PERIODO AND 
    	HI.CANAL = T1.CANAL	
    	';
    
            SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)';
    	--PRINT @SQL
    	
            EXEC sp_executesql @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,
                @ANOMES11 = @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3,
                @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5, @MARCA1 = @MARCA;
    	
        --END;



    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    quinta-feira, 17 de agosto de 2017 11:35

Todas as Respostas

  • Flavio,

    pode ser muita coisa né?

    Essa query retorna muitos registros para fazer insert?

    Você pode começar seguindo o conteúdo do link abaixo e postar os resultados que ajudamos a avaliar.

    http://rusanu.com/2014/02/24/how-to-analyse-sql-server-performance/



    Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)

    segunda-feira, 14 de agosto de 2017 18:36
  • Flavio,

    Pode ser sim parameter sniffing, devido a complexidade do seu código e volume de variáveis, neste caso, para resolver este comportamento onde o SQL Server entendendo que as variáveis devem ser tratadas como elementos fora do plano de execução a opção OPTIMIZE FOR no código fonte da procedure, como forma de orientar o SQL Server para reconhecer e otimizar o processamento da stored procedure e suas variáveis como elementos de um único plano de execução.

    Veja se este exemplo ajuda:

    -- Criando o Banco de Dados 
    Create Database ParameterSniffing
    Go
    
    -- Criando a TabelaDados --
    Create Table TabelaDados
    (Id Int Identity Primary Key,
     Descricao Char(100),
     Localal Char(6),
     DataCriacao DateTime Default Getdate(),
     Status char(2) default 'AC')
    Go
    
    -- Criando Índice na coluna Local para TabelaDados --
    Create Index IND_Local on TabelaDados(Local)
    Go
    
    -- Inserindo massa de dados --
    Insert Into TabelaDados (Name,Local) VALUES ('Test1','LocalA')
    GO 100000
    
    Insert Into TabelaDados (Name,Local) VALUES ('Test1','LocalB')
    GO 10
    
    -- Selecionando dados na TabelaDados com Local = 'LocalA' --
    Select * From TabelaDados
    Where Local = 'LocalA'
    Go
    
    -- Selecionando dados na TabelaDados com Local = 'LocalA' --
    Select * From TabelaDados
    Where Local = 'LocalB'
    Go
    
    -- Criando a Stored Procedure 
    Create Procedure ObterDadosPorLocal (@Local Char(6))
    As
    Begin
    
     Set NoCount ON
    
     Select * From TabelaDados
     Where Local = @Local
    End
    
    
    -- Executando a Stored Procedure ObterDadosPorLocal = LocalA --
    ObterDadosPorLocal 'LocalA'
    Go
    
    -- Executando a Stored Procedure ObterDadosPorLocal = LocalB --
    ObterDadosPorLocal 'LocalB'
    Go
    
    -- Obtendo informações sobre Plano de Execução de Stored Procedures --
    Select OBJECT_NAME(s.object_id) SP_Name,
           eqp.query_plan
    From sys.dm_exec_procedure_stats s CROSS APPLY sys.dm_exec_query_plan (s.plan_handle) eqp
    Where DB_NAME(database_id) = 'ParameterSniffing'
    
    -- Recompilando a Stored Procedure --
    SP_Recompile 'ObterDadosPorLocal'
    Go
    
    -- Alterando a Stored Procedure ObterDadosPorLocal adicionando a opção Recompile --
    Alter Procedure ObterDadosPorLocal (@Local as Char(6)) With Recompile
    As
    Begin
    
     Set NoCount On
    
     Select * From TabelaDados
     Where Local = @Local
    End
    
    -- Executando novamente a Stored Procedure ObterDadosPorLocal, descartando o Cache do Plano de Execução --
    Exec ObterDadosPorLocal @Local= N'LocalA' 
    Exec ObterDadosPorLocal @Local= N'LocalB' 
    Go
    
    -- Executando novamente a Stored Procedure ObterDadosPorLocal, recompilando e utilizando o do Plano de Execução, sem fazer o armazenamento --
    Exec [dbo].[ObterDadosPorLocal] @Local = N'LocalA' WITH RECOMPILE
    Go
    
    -- Alterando a Stored Procedure ObterDadosPorLocal removendo a opção Recompile e adicionando a Query Hint Optimize --
    Alter Procedure ObterDadosPorLocal (@Local CHAR(6))
    As
    Begin
    
     Set NoCount On
    
     Select * From TabelaDados
     Where Local = @Local
     OPTION (OPTIMIZE FOR (@Local = 'LocalA'))
    
    End
    
    -- Executando a Stored Procedure ObterDadosPorLocal = LocalA --
    ObterDadosPorLocal 'LocalA'
    Go
    
    -- Executando a Stored Procedure ObterDadosPorLocal = LocalB --
    ObterDadosPorLocal 'LocalB'
    Go
    


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 16 de agosto de 2017 00:39
  • Bom dia ,  vc consegue os paramentos da procedure ??

    siga esses passos na sua maquina, para avaliar uma possível criação de índice. 

    1) limpe o cache do seu sql 

    CHECKPOINT ;
    GO
    -- Limpa buffers (comandos add-hoc)
     DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS ; -- deleta o cache da query 
     GO
      DBCC  FREEPROCCACHE WITH NO_INFOMSGS; --deleta o plano execução ja feito
      GO
      DBCC FREESESSIONCACHE WITH NO_INFOMSGS
      GO

    2) Execute sua procedure com os parâmetros dessa forma ,primeiro vc comenta o comando de criação, depois declara as variáveis ,que são passadas por parâmetro e coloque os valores nelas. 

    seque um exemplo;

    OBS : quando for executar a sua sp inclua o plano de execução atual (CTRL +M)

    e veja se aparece algum pedido de criação de índice.

    ALTER PROCEDURE [dbo].[SP_FORECAST_SEMOVOS]
    --    (
    --      @PERIODO INT ,
    --      @ANOMES1 INT ,
    --      @ANOMES2 INT ,
    --      @ANOMES3 INT ,
    --      @ANOMES4 INT ,
    --      @ANOMES5 INT ,
    --      @TIPO_CANAL VARCHAR(20) ,
    --      @MARCA VARCHAR(3)
    --    )
    --    WITH RECOMPILE
    --AS
    
    /*##########################*/
    	DECLARE @PERIODO INT,
          @ANOMES1 INT ,
          @ANOMES2 INT ,
          @ANOMES3 INT ,
          @ANOMES4 INT ,
          @ANOMES5 INT ,
          @TIPO_CANAL VARCHAR(20) ,
          @MARCA VARCHAR(3);
    
          SELECT    @PERIODO  =??, --Coloque os paramentros que são pasados para a procedure
                    @ANOMES1 =??,
                    @ANOMES2 =??,
                    @ANOMES3 =??,
                    @ANOMES4 =??,
                    @ANOMES5 =??,
                    @TIPO_CANAL ,
                    @MARCA;
    
    /*##########################*/
    
        BEGIN
            DECLARE @TIPO_CANAL_STR VARCHAR(30);
            DECLARE @MARCA_STR VARCHAR(30);
            DECLARE @SQL NVARCHAR(4000);
            DECLARE @GRUPO_PRODUTO VARCHAR(50);	
            DECLARE @PARAMETROS NVARCHAR(4000);
            DECLARE @TIPO_CANAL1 VARCHAR(20);
            DECLARE @MARCA_TEMP VARCHAR(3);
    
            SET @TIPO_CANAL1 = @TIPO_CANAL;
            SET @MARCA_TEMP = @MARCA;
    		
            IF @TIPO_CANAL1 <> 'TODOS'
                BEGIN
                    SET @TIPO_CANAL_STR = ' AND R.Tipo_Canal = ' + CHAR(39)
                        + @TIPO_CANAL1 + CHAR(39) + ' ';
                END;
            ELSE
                BEGIN
                    SET @TIPO_CANAL_STR = ' ';
                END;
    
            IF @MARCA_TEMP <> '99'
                BEGIN
                    SET @MARCA_STR = ' AND M.CODSAP_MARCA = ' + CHAR(39)
                        + @MARCA_TEMP + CHAR(39) + ' '; 
                END;
            ELSE
                BEGIN
                    SET @MARCA_STR = ' ';
                END;
    
            SET @SQL = '	
    	INSERT INTO FORECAST.Hist_Hierarq_Para_Representatividade
    	SELECT
    	T1.CANAL,
    	T1.PERIODO,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE,
    	CASE WHEN SUM(T1.VOL) < 0 THEN 0 ELSE SUM(T1.VOL) END AS VOLUME_KG,
    	CASE WHEN SUM(T1.FNET) < 0 THEN 0 ELSE SUM(T1.FNET) END AS NETSALES
    	FROM(
    	SELECT
    	T.CANAL,
        @PERIODO1 AS PERIODO,
    	T.GRUPO_PRODUTO,
    	T.MARKET_SEGMENT,
    	T.CODSAP_MARCA,
    	T.CODSAP_PRODUCTSEGMENT,
    	T.CODSAP_PRODUCTLINE,
    	CASE WHEN T.VOLUME < 0 THEN 0 ELSE T.VOLUME END AS VOL,
    	CASE WHEN T.NET < 0 THEN 0 ELSE T.NET END AS FNET			
    		FROM(
    		 SELECT 
    		  CCR.CODIGOCANALVENDA AS CANAL,
    		  GP.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    		  MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		  CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		  
    		  PS.CODSAP_PRODUCTSEGMENT,
    		  PL.CODSAP_PRODUCTLINE,
    		  V.CODSAP_CLIENTE,
    		  V.CODSAP_ITEMPRODUTO,
    		  CASE WHEN SUM(V.VOLUME_FINAL) < 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME,
    		  CASE WHEN SUM(V.Valor_Liquido_Calculado) < 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET	  
    		 FROM VOLUME_ITEM V
    		  INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		  INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		  INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		  INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		  INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		  INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		  INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		  INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		  INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		  INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		  INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		  INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) '
                + @TIPO_CANAL_STR + @MARCA_STR
                + 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN ('
                + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39)
                + ')
    		 GROUP BY
    		  CCR.CODIGOCANALVENDA,
    		  GP.CODSAP_GRUPOPRODUTO,
    		  MS.CODSAP_MARKETSEGMENT,
    		  M.CODSAP_MARCA,
    		  PS.CODSAP_PRODUCTSEGMENT,
    		  PL.CODSAP_PRODUCTLINE,
    		  V.CODSAP_CLIENTE,
    		  V.CODSAP_ITEMPRODUTO
    		) AS T
    	) AS T1
    	GROUP BY
    	T1.CANAL,
    	T1.PERIODO,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE		
    	';
            SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)';
    	
            EXEC sp_executesql @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,
                @ANOMES11 = @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3,
                @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5, @MARCA1 = @MARCA;
            PRINT @SQL;
    
            SET @SQL = '
    	INSERT INTO FORECAST.Hist_Cli_Para_Representatividade 
    	SELECT
    	T2.CANAL,
    	T2.PERIODO,
    	T2.GRUPO_PRODUTO, 
    	T2.MARKET_SEGMENT,
    	T2.CODSAP_MARCA,
    	T2.CODSAP_PRODUCTSEGMENT,
    	T2.CODSAP_PRODUCTLINE,
    	T2.CODSAP_CLIENTE,
    	T2.VOLUME_KG,
    	CASE WHEN HI.VOLUME_KG = 0 THEN 0 ELSE T2.VOLUME_KG/HI.VOLUME_KG END AS REP,
    	CASE WHEN HI.NETSALES= 0 THEN 0 ELSE T2.NETSALES/HI.NETSALES END AS REP_NETSALES,
    	T2.NETSALES
    	FROM(
    	 SELECT
    	 T1.CANAL,
    	 @PERIODO1 AS PERIODO,
    	 T1.GRUPO_PRODUTO, 
    	 T1.MARKET_SEGMENT,
    	 T1.CODSAP_MARCA,
    	 T1.CODSAP_PRODUCTSEGMENT,
    	 T1.CODSAP_PRODUCTLINE,
    	 T1.CODSAP_CLIENTE,
    	 CASE WHEN T1.VOLUME_KG = 0 THEN  0 ELSE  T1.VOLUME_KG END AS VOLUME_KG,
    	 CASE WHEN T1.FNETSALES = 0 THEN  0 ELSE  T1.FNETSALES END AS NETSALES
    	 FROM(
    	  SELECT
    	 T.CANAL,
    	  T.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    	  T.MARKET_SEGMENT,
    	  T.CODSAP_MARCA,
    	  T.CODSAP_PRODUCTSEGMENT,
    	  T.CODSAP_PRODUCTLINE,
    	  T.CODSAP_CLIENTE,
    	  SUM(T.VOLUME) AS VOLUME_KG,
    	  SUM(T.NET) AS FNETSALES
    	  FROM(
    	   SELECT 
    		CCR.CODIGOCANALVENDA AS CANAL,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		 
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO,
    		CASE WHEN SUM(V.VOLUME_FINAL) < 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME ,
    		CASE WHEN SUM(V.Valor_Liquido_Calculado) < 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET
    	   FROM
    		VOLUME_ITEM V
    		INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) '
                + @TIPO_CANAL_STR + @MARCA_STR
                + 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN ('
                + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39)
                + ')
    	   GROUP BY
    		CCR.CODIGOCANALVENDA,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT,
    		M.CODSAP_MARCA,
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO
    	  ) AS T
    	 GROUP BY
    	 T.CANAL,
    	 T.CODSAP_GRUPOPRODUTO,
    	 T.MARKET_SEGMENT,
    	 T.CODSAP_MARCA,
    	 T.CODSAP_PRODUCTSEGMENT,
    	 T.CODSAP_PRODUCTLINE,
    	 T.CODSAP_CLIENTE
    	 ) AS T1
    	)T2 
    	INNER JOIN
    	FORECAST.Hist_Hierarq_Para_Representatividade HI ON
    	HI.GRUPO_PRODUTO = T2.GRUPO_PRODUTO AND
    	HI.MARKET_SEGMENT = T2.MARKET_SEGMENT AND
    	HI.CODSAP_MARCA = T2.CODSAP_MARCA AND
    	HI.CODSAP_PRODUCTSEGMENT = T2.CODSAP_PRODUCTSEGMENT AND
    	HI.CODSAP_PRODUCTLINE    = T2.CODSAP_PRODUCTLINE AND
    	HI.PERIODO = T2.PERIODO AND
    	HI.CANAL = T2.CANAL	
    	';
    	
    
            SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)';
    	--PRINT @SQL
    	
            EXEC sp_executesql @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,
                @ANOMES11 = @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3,
                @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5, @MARCA1 = @MARCA;
    	
    
            SET @SQL = '	
    	INSERT INTO FORECAST.HIST_FORECAST 
    	SELECT
    	T1.CANAL,
    	T1.PERIODO,
    	T1.TIPO_CANAL,
    	T1.GRUPO_PRODUTO,
    	T1.MARKET_SEGMENT,
    	T1.CODSAP_MARCA,
    	T1.CODSAP_PRODUCTSEGMENT,
    	T1.CODSAP_PRODUCTLINE,
    	T1.CODSAP_CLIENTE,
    	T1.CODSAP_ITEMPRODUTO,
    	T1.VOLUME_KG,
    	HI.REP AS REP_CLIENTE_NA_HIERARQUIA,
    	CASE WHEN HI.VOLUME_KG = 0 THEN 0 ELSE T1.VOLUME_KG/HI.VOLUME_KG END AS REP_SKU_NO_CLIENTE,
    	CASE WHEN HI.NETSALES = 0 THEN 0 ELSE T1.NETSALES/HI.NETSALES END AS REP_SKU_NO_CLIENTE_NETSALES
    	FROM(
    		SELECT
    		T.CANAL, 
    		@PERIODO1 AS PERIODO,
    		T.TIPO_CANAL,
    		T.GRUPO_PRODUTO,
    		T.MARKET_SEGMENT,
    		T.CODSAP_MARCA,
    		T.CODSAP_PRODUCTSEGMENT,
    		T.CODSAP_PRODUCTLINE,
    		T.CODSAP_CLIENTE,
    		T.CODSAP_ITEMPRODUTO,
    		T.VOLUME AS VOLUME_KG,
    	T.NET AS NETSALES
    		FROM(
    		SELECT
    		CCR.CODIGOCANALVENDA AS CANAL, 
    		R.TIPO_CANAL,
    		GP.CODSAP_GRUPOPRODUTO AS GRUPO_PRODUTO,
    		MS.CODSAP_MARKETSEGMENT AS MARKET_SEGMENT,
    		CASE @MARCA1 WHEN 99 THEN 0 ELSE M.CODSAP_MARCA END AS CODSAP_MARCA,		
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO,
    		CASE WHEN SUM(V.VOLUME_FINAL) <= 0 THEN 0 ELSE SUM(V.VOLUME_FINAL) END AS VOLUME,
    		CASE WHEN SUM(V.Valor_Liquido_Calculado) <= 0 THEN 0 ELSE SUM(V.Valor_Liquido_Calculado) END AS NET
    		FROM
    		VOLUME_ITEM V
    		INNER JOIN ITEM_PRODUTO I ON I.CODSAP_ITEMPRODUTO = V.CODSAP_ITEMPRODUTO
    		INNER JOIN GRUPO_PRODUTO GP ON GP.CODSAP_GRUPOPRODUTO = I.CODSAP_GRUPOPRODUTO
    		INNER JOIN HIERARQUIA_PRODUTO H ON H.CODSAP_HIERARQUIA = I.CODSAP_HIERARQUIA
    		INNER JOIN PRODUCT_LINE PL ON PL.CodSAP_ProductLine = H.CodSAP_ProductLine
    		INNER JOIN PRODUCT_SEGMENT PS ON PS.CodSAP_ProductSegment = H.CodSAP_ProductSegment
    		INNER JOIN PRODUTO_FAMILIA PF ON PF.CodSAP_ProdutoFamilia = H.CodSAP_ProdutoFamilia
    		INNER JOIN MARCA M ON M.CodSAP_Marca = H.CodSAP_Marca
    		INNER JOIN MARKET_SEGMENT MS ON MS.CODSAP_MARKETSEGMENT = H.CODSAP_MARKETSEGMENT
    		INNER JOIN CCR ON CCR.CODIGOCANALVENDA = V.CODIGOCANALVENDA AND CCR.CODSAP_CLIENTE = V.CODSAP_CLIENTE
    		INNER JOIN SUPERVISOR SU ON SU.CODSAP_SUPERVISOR = CCR.CODSAP_REPRESENTANTE
    		INNER JOIN REGIAO R ON R.CODSAP_REGIAO = SU.CODSAP_REGIAO
    		INNER JOIN CALENDARIO CA ON CA.DATA = V.DATA_EMISSAO
    		  WHERE CA.ANOMES in(@ANOMES11,@ANOMES21,@ANOMES31,@ANOMES41,@ANOMES51) '
                + @TIPO_CANAL_STR + @MARCA_STR
                + 'AND V.ID_Cat_Item NOT IN(37,3,15,4,10,16,7,29) AND GP.CODSAP_GRUPOPRODUTO IN ('
                + CHAR(39) + '01' + CHAR(39) + ',' + CHAR(39) + '05' + CHAR(39)
                + ')
    		GROUP BY
    		CCR.CODIGOCANALVENDA,
    		R.TIPO_CANAL,
    		GP.CODSAP_GRUPOPRODUTO,
    		MS.CODSAP_MARKETSEGMENT,
    		M.CODSAP_MARCA,
    		PS.CODSAP_PRODUCTSEGMENT,
    		PL.CODSAP_PRODUCTLINE,
    		V.CODSAP_CLIENTE,
    		V.CODSAP_ITEMPRODUTO 
    		) AS T
    	)T1
    	INNER JOIN FORECAST.Hist_Cli_Para_Representatividade HI ON
    	HI.GRUPO_PRODUTO = T1.GRUPO_PRODUTO AND
    	HI.MARKET_SEGMENT = T1.MARKET_SEGMENT AND
    	HI.CODSAP_MARCA = T1.CODSAP_MARCA   AND
    	HI.CODSAP_PRODUCTSEGMENT = T1.CODSAP_PRODUCTSEGMENT AND
    	HI.CODSAP_PRODUCTLINE    = T1.CODSAP_PRODUCTLINE  AND
    	HI.CODSAP_CLIENTE = T1.CODSAP_CLIENTE AND
    	HI.PERIODO = T1.PERIODO AND 
    	HI.CANAL = T1.CANAL	
    	';
    
            SET @PARAMETROS = '@PERIODO1 INT, @ANOMES11 INT, @ANOMES21 INT, @ANOMES31 INT, @ANOMES41 INT, @ANOMES51 INT, @MARCA1 VARCHAR(3)';
    	--PRINT @SQL
    	
            EXEC sp_executesql @SQL, @PARAMETROS, @PERIODO1 = @PERIODO,
                @ANOMES11 = @ANOMES1, @ANOMES21 = @ANOMES2, @ANOMES31 = @ANOMES3,
                @ANOMES41 = @ANOMES4, @ANOMES51 = @ANOMES5, @MARCA1 = @MARCA;
    	
        --END;



    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    quinta-feira, 17 de agosto de 2017 11:35
  • Boa tarde,

    Por falta de retorno, essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 17 de agosto de 2017 16:30
    Moderador