Oi! Seja bem-vindo!

Hoje vou mostrar como Prever colunas do SELECT no SQL Server para qualquer query que você pretenda executar. Essa técnica é muito útil quando você deseja montar uma tela (por exemplo em html) ou salvar em uma tabela os resultados de uma consulta dinâmica. Um exemplo disso seria uma query com PIVOT, como já vimos em outros artigos.

Como prever as colunas de um SELECT?

Antes do SQL 2012 era realmente difícil prever o resultado de um SELECT sem conhecer e consultar todas as tabelas envolvidas.

“Para a nossa alegria”, esse quadro mudou. A partir do SQL2012, foi introduzida a função dm_exec_describe_first_result_set, que faz o trabalho de previsão das colunas de um resultset, praticamente sem esforço da nossa parte!

Veja o script usado no vídeo dessa semana e faça os testes ai na sua máquina:

 


------------------------------------------------------------------
-- Como prever as colunas de um SELECT
------------------------------------------------------------------
--------------------------------------------------
-- Banco de dados para nosso teste
--------------------------------------------------
-- Banco de testes
use master
if db_id('curso') is not null 
	drop database curso
go
create database curso
go
use curso
go
create table produtos (
	id smallint identity(1,1) primary key,
	nm varchar(100),
	vl decimal(10,2),
	ic_ativo bit not null default(1)
)
insert produtos (nm, vl) values 
	('Mouse Gammer 25 botões', 200),
	('Teclado Gammer 350 teclas', 300),
	('Monitor 32 Pol Full HD', 1000),
	('RAM DDR4 4GB Powerturbo', 500),
	('CPU Nasa 10Ghz', 2000),
	('HD SSD 1TB', 2000)
	

--------------------------------------------------
-- Prever as colunas de um SELECT
--------------------------------------------------
-- Exemplo de query executada diretamente:
select * from produtos


-- SELECT simples:
select 
	* 
from sys.dm_exec_describe_first_result_set(
	'select 
		id as [identificador do produto], 
		vl * 0.12 as imposto,
		* 
	from produtos', -- Query a ser analisada
	null, -- parâmetros da query - análogo a sp_executesql (ex: abaixo)
	1 -- inclui informações sobre a origem das colunas do resultset (ex: mapeamento de alias para colunas físicas)
)

-- SELECT com parâmetros:
select * 
from sys.dm_exec_describe_first_result_set(
	'select * from produtos where id = @id_produto',
	'@id_produto int', 
	1 
)

--------------------------------------------------
-- Excluir dados de teste
--------------------------------------------------
use master
go
drop database curso
go


 

CONCLUSÃO

Esse é o tipo de coisa me empolga em relação a evolução do SQL! Porque? Não sei se você já precisou prever as colunas de um SELECT alguma vez, dependendo da query é literalmente um parto fazer isso!

Sorte da nova geração, onde temos essas inovações incríveis como a função (dm_exec_describe_first_result_set), para fazer todo o trabalho pesado e chato, enquanto você e eu podemos nos focar no que importa para nossas carreiras.

Espero que tenha gostado do artigo, nos vemos no próximo!

Abraço do seu amigo Josué 🙂

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *