Criando Querys Dinâmicas dentro de Stored Procedures

Dica – Criando Querys Dinâmicas dentro de Stored Procedures.

Anúncios

Pessoal, bom dia.

Tudo bem com vocês?

A dica de hoje tem o objetivo de demonstrar como podemos criar uma Stored Procedure no SQL Server parametrizada utilizada como um comando Select dinâmico, mais conhecido como Query Dinâmica.

O conceito de Query Dinâmica, esta presente no SQL Server há muito tempo e como todo conceito possui suas vantagens e desvantagens que qualquer Administrador, Desenvolvedor ou simplesmente amante do SQL Server gosta de destacar, como também, discutir.

Nesta dica não vou argumentar quais seriam estes elementos, mas me sinto na obrigação de pelo menos alertar sobre possíveis riscos que este tipo de recurso pode representar para seu ambiente, sendo assim, procure utiliza-lo com cautela, sempre tendo em mente que você esta abrindo uma porta de entrada a instruções e procedimentos que podem gerar futuros impactos ou problemas em seu ambiente.

Importante: Uma Stored Procedure não possui obrigação de retornar valores para usuário, ao bastante diferente de uma função que obrigatoriamente deverá retornar pelo menos uma linha de registro.

Pois bem, a Stored Procedure que eu vou utilizar nesta dica possui o nome de P_DynamicProcedure, e como toda Stored Procedure possui 4 parâmetros de entrada de valores apresentados abaixo:

  • @Tabela varchar(50),
  • @Colunas varchar(500),
  • @CampoChave varchar(50),
  • @Valores VarChar(50)

Onde:

@Tabela – Parâmetro utilizado pelo usuário para especificar o nome da tabela que será consultada no comando Select.

@Colunas – Parâmetro utilizado pelo usuário para especificar o conjunto de colunas que serão consultados no comando Select.

@CampoChave – Parâmetro utilizado como elemento de filtro condicional na clausula Where do comando Select.

@Valores – Parâmetro utilizado como valor de filtro específico para a clausula Where no comando Select. De todos os parâmetros este é único que não necessita ser especificado por padrão.

A construção desta Query dinâmica é realizado neste bloco de código:

Declare @Comando Varchar(1000)

Set @Comando = ‘Select ‘+@Colunas +’ from ‘+@Tabela+ ‘ Where ‘+@ChaveTabela + ‘ = ‘+ IsNull(@ChaveValor,0)

Podemos observar a declaração de uma variável denonimada @Comando, utilizado em seqüência para armazenar a construção do comando Select acompanhado dos parâmetros informados na execução da P_DynamicProcedure.

Após a construção do comando e armazenado dentro da variável @Comando, a próxima linha:

Exec(@Comando): Responsável em executar as instruções especificadas na variável @Comando.

Observação: Ao utilizar a instrução Exec para execução da variável @Comando, o SQL Server por padrão cria em tempo de execução uma nova sessão dedicada exclusivamente no processamento de todas as transações passadas como parâmetro na definição da instrução.

Bem agora que você já conhece um pouquinho mais sobre a execução desta Query Dinâmica, como o mecanismo de execução da query é criado, vou apresentar abaixo o código, denominado Código 1 , referente a criação da Stored Procedure P_DynamicProcedure.

— Código 1 – Criando a Stored Procedure P_DynamicProcedure —

 Create Procedure P_DynamicProcedure @Tabela varchar(50),

                                                                        @Colunas varchar(500),

                                                                        @ChaveTabela varchar(50),

                                                                        @ChaveValor VarChar(50) = Null

As

Begin

Declare @Comando Varchar(1000)

Set @Comando = ‘Select ‘+@Colunas +’ from ‘+@Tabela+ ‘ Where ‘+@ChaveTabela + ‘ = ‘+ IsNull(@ChaveValor,0)

Exec(@Comando)

End

Após a criação da Stored Procedure, podemos realizar a execução da mesma, especificando os valores para os respectivos parâmetros de entrada, conforme o Código 2 apresentado abaixo:

— Código 2 – Executando a Stored Procedure P_DynamicProcedure –

Exec P_DynamicProcedure ‘sysusers’,’uid, Status, Name’,’uid’,’1’

A Figura 1 apresentada a seguir ilustra o resultado após a execução da Stored Procedure:

 

Figura 1 – Resultado apresentado após a execução da P_DynamicProcedure.

 

Galera, esta ai mais uma dica, vou encerrando, por aqui, espero que todos possam ter gostado e que este simples exemplo venha a ajudar em suas atividades diárias.

 

Encontramos-nos em breve.

 

Até mais.

Autor: Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação. Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP - Faculdade de Informática e Administração Paulista de São Paulo. Pós-Graduado em Gestão da Tecnologia da Informação Faculdade - ESAMC Sorocaba. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1995 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator - Administrador de Banco de Dados - SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, Triggers. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping. Atualmente trabalho como Administrador de Banco de Dados no FIT - Instituto de Tecnologia da Flextronics, como também, Consultor em Projetos de Tunnig e Performance para clientes, bem como, Professor Titular na Fatec São Roque. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Possuo titulação Oficial Microsoft MVP - SQL Server renovada desde 2007.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s