Neste artigo vamos ver como trabalhar com consultas dinâmicas no SQL Server. Este tipo de consulta é útil quando não temos informações sobre os dados a serem consultados, só teremos estas informações em tempo de execução. Um bom exemplo de uma consulta dinâmica seria uma stored procedure que retorna a quantidade total de registro de uma tabela X, porém só saberemos o nome da tabela em tempo de execução. Existem duas maneiras de executar query’s dinâmicas no SQL Server, usando o comando EXEC() ou usando uma stored procedure padrão chamda sp_executesql, logo mais veremos como utilizar um recurso ou outro. Para simular os exemplos vamos utilizar o banco de dados Northwind.Veja na figura 1 a tentativa de executar uma query dinâmica.

Executando consultas dinâmicas
Figura 1. Executando consultas dinâmicas

Pode-ser verificar pela figura 1 que é preciso utilizar algumas artimanhas para executar consultas dinâmicas.Vamos agora executar a mesma consulta usando o comando EXEC() e sp_executesql. Veja os exemplos nas figuras 2 ,3 e 4.

Executando consultas dinâmicas usando o comando EXEC
Figura 2. Executando consultas dinâmicas usando o comando EXEC
Executando consultas dinâmicas usando o comando EXEC
Figura 3. Executando consultas dinâmicas usando o comando EXEC
Executando consultas dinâmicas usando a stored procedure sp_executesql
Figura 4. Executando consultas dinâmicas usando a stored procedure sp_executesql

Um exemplo utilizando variáveis como parâmetros da consulta

Vamos agora ver um exemplo um pouco mais complicado, neste caso tudo será definido dinamicamente, o nome da tabela, a condição da consulta e o parâmetro da consulta. Veja o exemplo na figura 5.

Gerando query dinâmica utilizando variáveis como parametro
Figura 5. Gerando query dinâmica utilizando variáveis como parametro

Perceba que na query montada dinamicamente o parâmetro @CustomerID está sem aspas simples, neste caso o SQL irá tratar isso como uma coluna da tabela e se você tentar executar esta query com certeza irá receber a seguinte mensagem: “Invalid column name 'VINET'”. Para resolver este problema vamos colocar aspas simples antes e após o nome da variável na query gerada dinamicamente. Veja na figura 6 o resultado.

O resultado da query
Figura 6. O resultado da query

Usando sp_executesql com parâmetros

Vamos agora ver como executar query’s dinâmicas com a stored procedure sp_executesql utilizando parâmetros de entrada, esta seria uma maneira de resolver o problema acima. Você pode perceber olhando a figura 7 que devemos enviar a query a ser executada, os tipos de parâmetro e finalmente os parâmetros.

Executando query’s dinâmicas com parâmetros de entrada usando sp_executesql
Figura 7. Executando query’s dinâmicas com parâmetros de entrada usando sp_executesql

Conclusão

Neste artigo mostramos como trabalhar com query’s dinâmicas no SQL Server, trata-se de uma dica muito útil no dia a dia de quem usa a Transacat-SQL. Se você ainda não usou query’s dinâmicas com certeza uma hora irá precisar utilizar. Espero que a dica seja útil.