none
Utilizar Variavel na condição atraves do Merge RRS feed

  • Pergunta

  • Prezados bom dia!! Estou me deparando na situação onde necessito fazer uma atualização em N registros de uma tabela atraves do Merge, para isso gostaria de utilizar uma variavel no source. Há esta possibilidade?

    Estou adicionando o codigo para melhor entendimento:

    If Object_Id('TempDb..#Arrecadacao') is not null
    	drop table #Arrecadacao
    go
    --criando tabela temporaria
    Create table #Arrecadacao(
    	IdArrecadacao int identity constraint pkIdArrecadacao primary key
    	,Valor decimal(18,2)
    	,Ativo bit
    	)
    go
    --inserindo dados na tabela
    Insert into #Arrecadacao Values
    	(10.00, 1)
    	,(20.00,1)
    	,(30.00,1)
    	,(45,1)
    	,(50,1)
    
    --Inativar as arrecadacoes Id 4 e 5 com a condição IN no merge
    Merge #Arrecadacao A
    Using ( 
    	Select * from #Arrecadacao where IdArrecadacao in(4,5)
    	)B
    on(A.IdArrecadacao = B.IdArrecadacao)
    When matched then update set
    	A.Ativo = 0;
    	
    select * from #Arrecadacao
    
    --Como fazer o mesmo processo utilizando na condição IN uma variavel??
    
    Declare @IdArrecadacao nvarchar(max)
    set @IdArrecadacao = '(4,5)'
    
    
    Merge #Arrecadacao A
    Using ( 
    --o problema esta no in
    	Select * from #Arrecadacao where IdArrecadacao in+@IdArrecadacao
    	)B
    on(A.IdArrecadacao = B.IdArrecadacao)
    When matched then update set
    	A.Ativo = 0;
    	
    select * from #Arrecadacao
    
    
    Certo da atenção de sempre

    quinta-feira, 15 de outubro de 2015 14:03

Respostas

  • Boa tarde,

    Acredito que você poderia utilizar uma variável do tipo Table nesse caso. Ex:

    declare @Tbl_IdArrecadacao table (IdArrecadacao integer);
    insert into @Tbl_IdArrecadacao values (4), (5);
    
    Merge #Arrecadacao A
    Using ( 
    	Select * from @Tbl_IdArrecadacao as i
    	inner join #Arrecadacao as a 
    		on a.IdArrecadacao = i.IdArrecadacao
    	)B
    on(A.IdArrecadacao = B.IdArrecadacao)
    When matched then update set
    	A.Ativo = 0;

    Espero que ajude.


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

    quinta-feira, 15 de outubro de 2015 15:17

Todas as Respostas

  • Boa tarde,

    Acredito que você poderia utilizar uma variável do tipo Table nesse caso. Ex:

    declare @Tbl_IdArrecadacao table (IdArrecadacao integer);
    insert into @Tbl_IdArrecadacao values (4), (5);
    
    Merge #Arrecadacao A
    Using ( 
    	Select * from @Tbl_IdArrecadacao as i
    	inner join #Arrecadacao as a 
    		on a.IdArrecadacao = i.IdArrecadacao
    	)B
    on(A.IdArrecadacao = B.IdArrecadacao)
    When matched then update set
    	A.Ativo = 0;

    Espero que ajude.


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

    quinta-feira, 15 de outubro de 2015 15:17
  • E muito!!

    Obrigado

    quinta-feira, 15 de outubro de 2015 17:24