none
select ou set RRS feed

  • Pergunta

  • Pessoal

         Na questão de performance e melhor desempenho, qual dos comandos abaixo seria o mais recomendado ?

    1)
    set @ic_Status_Registro = '02' -- Erro  
    set @id_Formulario_Sistema = dbo.fn_Return_id_Formulario_Sistema(@nm_Formulario) 
    
    2)
     select @ic_Status_Registro = '02' -- Erro  
    
     select @id_Formulario_Sistema = dbo.fn_Return_id_Formulario_Sistema(@nm_Formulario)  

    terça-feira, 25 de fevereiro de 2014 09:46

Respostas

  • Nei,

    Depende, o conceito correto é utilizar o SET, mas se você necessita atualizar o valor de várias variáveis isto só é possível utilizando o SELECT.

    Veja abaixo:

    -- UTILIZANDO SET
    SET @ic_Status_Registro = '02' -- Erro  
    SET @id_Formulario_Sistema = dbo.fn_Return_id_Formulario_Sistema(@nm_Formulario) 
    
    --UTILIZANDO SELECT
    SELECT @ic_Status_Registro = '02', @id_Formulario_Sistema = dbo.fn_Return_id_Formulario_Sistema(@nm_Formulario) 

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    terça-feira, 25 de fevereiro de 2014 10:53
    Moderador
  • Alexandre

      

         No caso de atualizar várias variaveis, mesmo assim você utiliza o select, este foi um ponto que me gerou muito dúvida, na questão de ter vários set, e ter apenas um select, o que você acha em relação da sua experiência ?

    Nei,

    Isto envolve apenas a quantidade de bytes que vão trafegar para executar o comando. E simplesmente, isto pode fazer diferença na performance de acordo com a quantidade de variáveis que você vai manipular.

    Vou exibir abaixo uma demonstração com apenas 3 variáveis. De um lado, às variáveis são carregadas pelo "SET" e na consulta ao lado, às mesmas variáveis são carregadas por um "SELECT".

    Você vai ver que já existe uma alteração nos bytes trafegados e consequentemente, afetando a performance (imperceptível em pequenas quantidades).

    Como eu disse anteriormente, apenas uma quantidade grande de variáveis vai influenciar o desempenho da sua procedure / script, mas é bom saber diferenciar o que é o padrão SQL-92 (SET) e o que pode ser mais performático (SELECT).

    Não esqueça de marcar como resposta todos os posts que ajudaram na sua solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 26 de fevereiro de 2014 01:11
    Moderador
  • NeiBala, como o Durval disse, só vai fazer uma grande diferença se voce tiver um numero muito grande de variaveis na mesma execução, o que é muito raro de acontecer, vai de voce e do padrão que a empresa utiliza para os codigos, basicamente em processos normais por questões de padrão, sempre utilizo somente o set para atribuir valor e select para exibições.

    Alexandre Matayosi Conde Mauricio.

    quarta-feira, 26 de fevereiro de 2014 11:55

Todas as Respostas

  • Nei,

    Depende, o conceito correto é utilizar o SET, mas se você necessita atualizar o valor de várias variáveis isto só é possível utilizando o SELECT.

    Veja abaixo:

    -- UTILIZANDO SET
    SET @ic_Status_Registro = '02' -- Erro  
    SET @id_Formulario_Sistema = dbo.fn_Return_id_Formulario_Sistema(@nm_Formulario) 
    
    --UTILIZANDO SELECT
    SELECT @ic_Status_Registro = '02', @id_Formulario_Sistema = dbo.fn_Return_id_Formulario_Sistema(@nm_Formulario) 

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    terça-feira, 25 de fevereiro de 2014 10:53
    Moderador
  • Nei, somente complementando a resposta do colega, em termos de performance acredito que não vai ter diferença nenhuma, voce pode fazer os testes para verificar e ver tambem o plano de execução de ambas opções, eu por costume utilizo sempre o set para atribuir valor a variavel e select para exibir.

    Alexandre Matayosi Conde Mauricio.

    terça-feira, 25 de fevereiro de 2014 13:01
  • Alexandre

      

         No caso de atualizar várias variaveis, mesmo assim você utiliza o select, este foi um ponto que me gerou muito dúvida, na questão de ter vários set, e ter apenas um select, o que você acha em relação da sua experiência ?

    quarta-feira, 26 de fevereiro de 2014 00:35
  • Alexandre

      

         No caso de atualizar várias variaveis, mesmo assim você utiliza o select, este foi um ponto que me gerou muito dúvida, na questão de ter vários set, e ter apenas um select, o que você acha em relação da sua experiência ?

    Nei,

    Isto envolve apenas a quantidade de bytes que vão trafegar para executar o comando. E simplesmente, isto pode fazer diferença na performance de acordo com a quantidade de variáveis que você vai manipular.

    Vou exibir abaixo uma demonstração com apenas 3 variáveis. De um lado, às variáveis são carregadas pelo "SET" e na consulta ao lado, às mesmas variáveis são carregadas por um "SELECT".

    Você vai ver que já existe uma alteração nos bytes trafegados e consequentemente, afetando a performance (imperceptível em pequenas quantidades).

    Como eu disse anteriormente, apenas uma quantidade grande de variáveis vai influenciar o desempenho da sua procedure / script, mas é bom saber diferenciar o que é o padrão SQL-92 (SET) e o que pode ser mais performático (SELECT).

    Não esqueça de marcar como resposta todos os posts que ajudaram na sua solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 26 de fevereiro de 2014 01:11
    Moderador
  • NeiBala, como o Durval disse, só vai fazer uma grande diferença se voce tiver um numero muito grande de variaveis na mesma execução, o que é muito raro de acontecer, vai de voce e do padrão que a empresa utiliza para os codigos, basicamente em processos normais por questões de padrão, sempre utilizo somente o set para atribuir valor e select para exibições.

    Alexandre Matayosi Conde Mauricio.

    quarta-feira, 26 de fevereiro de 2014 11:55