Dica de Produtividade – Queries com SP_EXECUTESQL
Fala Galera,
Espero que estejam todos bem!
No post de hoje, vou trazer uma dica rápida para formatação de queries em T-SQL que são chamadas com sp_executesql.
Geralmente, quando estamos coletando um profile ou buscando alguma query que esteja demorando no ambiente, dependendo de como ela foi construída, a aplicação envia o resultset dela em um formato um pouco fora do convencional.
Exemplo.:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | exec sp_executesql N'SELECT T100.Cod_pro, T100.Codigo, isnull(sum(T100.cusmis),0) ''CusMis'', avg(T100.MedMis) ''MedMis'', isnull(sum(T100.CusSet),0) ''CusSet'', avg(T100.MedStm) ''MedStm'' FROM ( SELECT ipv.Cod_pro, ipv.Codigo, dls.codlot, isnull(dl2.usu_cusmis,0) ''CusMis'', dl2.usu_cusmim ''MedMis'', (SELECT sum( dl3.usu_cusset) FROM tb4 dl3 WITH (nolock) WHERE dl3.cod_emp = dls.cod_emp AND dl3.codlot = dls.codlot AND ( dl3.usu_cusset > 0 OR dl3.usu_cusset IS NOT NULL)) ''CusSet'', (SELECT sum(dl3.usu_cusstm) FROM tb3 dl3 WITH (nolock) WHERE dl3.cod_emp = dls.cod_emp AND dl3.codlot = dls.codlot AND ( dl3.usu_cusset > 0 OR dl3.usu_cusset IS NOT NULL)) ''MedStm'' FROM tb1 ipv WITH (nolock) LEFT JOIN tb2 dls WITH (nolock) ON dls.cod_emp = ipv.cod_emp AND dls.codfil = dls.codfil AND dls.codsnf = ipv.codsnf AND dls.numnfv = ipv.numnfv AND dls.seqipv = ipv.seqipv LEFT JOIN tb5 dl2 WITH (nolock) ON dl2.cod_emp = ipv.cod_emp AND dl2.Cod_pro = ipv.Cod_pro AND dl2.Codigo = ipv.Codigo AND dl2.coddep = ipv.coddep AND dl2.codlot = dls.codlot WHERE ipv.cod_emp = @P1 AND ipv.codfil = @P2 AND ipv.codsnf = @P3 AND ipv.numnfv = @P4 AND ipv.Cod_pro = @P5 AND ipv.Codigo = @P6 AND ipv.seqipv = @P7 ) T100 GROUP BY T100.Cod_pro, T100.Codigo ',N'@P1 smallint,@P2 smallint,@P3 varchar(3),@P4 int, @P5 varchar(9),@P6 varchar(3),@P7 smallint' ,1,1,'INFO',70469,'XPTO','020',1 |
Acontece que para ler isso fica um pouco confuso, pois quando colamos esse resultado no nosso Management Studio, geralmente fica tudo em uma linha só, até podemos tentar formatar, mas como está tudo dentro de um texto não ajuda muito e precisamos ficar “quebrando” as linhas da query para entender o que ela está fazendo, as vezes a query é giganteeeeesca e perdemos um tempão ajustando isso.
Essa dica aqui foi muito útil e me ajudou demais a melhorar a minha produtividade nos trabalhos de Tuning.
Encontrei 03 opções para formatar esse tipo de query, sendo desses métodos um pago e os outros dois gratuitos.
Vou passar resumidamente por essas ferramentas.
Método 01:
- Redgate SQL Prompt
Essa poderosa ferramenta é um verdadeiro canivete suíço na mão de pessoas que desenvolvem em T-SQL. Ela é instalada como uma extensão no próprio Management Studio e te oferece um leque gigantesco de possibilidades. Entre as inúmeras funcionalidades que ela possui, existe a opção de formatar esse tipo de query.
Para isso, faça o seguinte, clique com o botão direito na tela do seu Management Studio e selecione a opção “Inline EXEC”.
Repare que a ferramenta tirou o sp_executesql e transformou em um código T-SQL, agora você pode utilizar o SQL FORMATTER ou o POORSQL ou algum outro site da sua preferência para formatar a query e ficar com um código ainda mais formatado e legível.
Uma maravilha né? Pena que é pago! 🙁
Mas nem tudo está perdido, se você tiver o MCT (Microsoft Certified Trainer), você pode solicitar uma licença do SQL PROMPT por um ano gratuitamente.
No blog do Dirceu Resende tem um artigo muito bom explicando os benefícios que você pode obter sendo MCT, vale a pena dar uma conferida 😉
https://www.dirceuresende.com/blog/microsoft-certified-trainer-mct-de-graca-ate-setembro-de-2020/
Ah e se quiser saber mais sobre o SQL PROMPT não deixe de passar por esse vídeo no YouTube também do Dirceu Resende que ele fala não só sobre essa mais também diversas outras ferramentas para o SQL Server que potencializam a produtividade.
Segue o link :
https://www.youtube.com/watch?v=iqUByGhF0io&t=2s
Método 02:
- Azure Data Studio
Existem inúmeras funcionalidades nessa ferramenta que dizem as más línguas que veio para substituir o bom e velho Management Studio, dentre elas, temos a opção de utilizar “plugins” desenvolvidos por terceiros que podem ser instalados, atribuindo mais versatilidade a ferramenta. Existe um plugin que faz basicamente a mesma funcionalidade descrita no método anterior, mas nesse caso é gratuito xD.
Eu utilizei uma extensão chamada “Convert sp_executesql to sql” criada pelo Piejman Nikram. Para instalar, basta procurar pela extensão na barra de ferramentas e seguir o passo a passo abaixo.
Ao clicar em instalar clique em “Open” para continuar (essa opção vai abrir o repositório do github onde foi publicada extensão).
Baixe o arquivo sqlops-spexecutesql-to-sql-1.0.1.vsix.
Depois de baixar o arquivo, volte no Azure Data Studio na aba de extensões, clique sobre os três pontinhos e selecione a opção “Install From Vsix”.
Clique em “Install”.
Após isso, irá aparecer uma mensagem no rodapé do seu Azure Data Studio, informando que essa é uma extensão desenvolvida por terceiros e isso pode envolver riscos de segurança. Clique em “Yes”.
Pronto, extensão instalada com êxito.
Agora para utilizar essa extensão é muito simples, na sua sessão do Azure Data Studio, copie sua query que contenha o sp_executesql e clique com o botão direito sobre a tela e depois vá em “Command Palette”.
Repare que ao começar a digitar a palavra convert, a extensão que acabamos de instalar foi encontrada, dê um clique nela e veja a mágica acontecer. ?
Método 03:
- Execsqlformat
A última dica é o site http://execsqlformat.herokuapp.com/ que basicamente faz a mesma coisa que os demais métodos citados, mas com a proposta de você colar a query diretamente no site e ele fazer a conversão pra você.
É isso ai pessoal, espero que tenham gostado.
Qualquer dúvida deixe nos comentários, espero trazer conteúdos pra vocês sempre que possível.
Um abraço, fiquem com Deus!!
Gustavo Larocca
Consultor SQL Server