none
Uso de CASE inadequado RRS feed

  • Pergunta

  • Olá, pessoal!
    Por gentileza, estou desenvolvendo o seguinte comando, porém infelizmente o SQL Server me acusa erro nas linhas onde utilizo CASE, porém não sei como seria a melhor forma de utilizar além dessa.
    Agradeço desde já pela atenção.

    declare @quantidade int = 5
    declare @DocEntry   int = 2
    declare @CodeItem   varchar(200) = '110CASA' 
    
    Select [ItemCode], [Dscription], [Price], [Quantity], [FreeTxt], [QuantidadeEmbalagem], [variavel] INTO #TMP FROM
    
    (select T1.[ItemCode], t1.[Dscription], t1.[Price], t1.[Quantity], t1.[FreeTxt], @quantidade as [QuantidadeEmbalagem], ( cast(t1.[Quantity] as decimal)/cast(@quantidade as decimal)) as variavel
    from OQUT T0 
        INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry
        INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode where T0.DocEntry =  @DocEntry and T1.ItemCode = @CodeItem) T0
    
    DECLARE C1 CURSOR FOR SELECT * FROM #TMP;
    DECLARE	  @ItemCode nvarchar(30) 
    		, @Dscription nvarchar(200)
    		, @Price decimal(8,2)
    		, @Quantity nvarchar(25)
    		, @FreeTxt nvarchar(200)
    		, @QuantidadeEmbalagem int
    		, @variavel decimal
    		
    open c1
    fetch next from c1 into @ItemCode, @Dscription, @Price, @Quantity, @FreeTxt, @QuantidadeEmbalagem, @variavel
    declare @count int  = 1
    
    CASE
    When @variavel % 2 = 0 then
    	while  @count < (cast(@variavel as decimal))
    	begin
    	 insert into #TMP values (@ItemCode, @Dscription, @Price, @Quantity, @FreeTxt, @QuantidadeEmbalagem, @variavel)
    	 set @count = @count + 1
    	end
    ELSE
    	 while  @count <= (cast(@variavel as decimal))
    	 begin
    	 insert into #TMP values (@ItemCode, @Dscription, @Price, @Quantity, @FreeTxt, @QuantidadeEmbalagem, @variavel)
    	 set @count = @count + 1
    	 end
    END as Lo
    
    close c1
    deallocate c1
    select * from #TMP
    drop table #TMP

    quinta-feira, 22 de novembro de 2018 15:14

Respostas

  • Boa tarde,

    Acho que no local onde está você pode utilizar um If no lugar do Case. Pelo que entendi do seu código acho que o trecho do Case poderia ficar da seguinte forma:

    declare @count int;
    if @variavel % 2 = 0
        set @count = 1
    else
        set @count = 0;
    while  @count < (cast(@variavel as decimal))
    begin
     insert into #TMP values (@ItemCode, @Dscription, @Price, @Quantity, @FreeTxt, @QuantidadeEmbalagem, @variavel)
     set @count = @count + 1
    end

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 22 de novembro de 2018 16:31

Todas as Respostas

  • Boa tarde,

    Acho que no local onde está você pode utilizar um If no lugar do Case. Pelo que entendi do seu código acho que o trecho do Case poderia ficar da seguinte forma:

    declare @count int;
    if @variavel % 2 = 0
        set @count = 1
    else
        set @count = 0;
    while  @count < (cast(@variavel as decimal))
    begin
     insert into #TMP values (@ItemCode, @Dscription, @Price, @Quantity, @FreeTxt, @QuantidadeEmbalagem, @variavel)
     set @count = @count + 1
    end

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 22 de novembro de 2018 16:31
  • Obrigado pela ajuda!
    Auxiliou bastante!!

    sexta-feira, 23 de novembro de 2018 18:06