Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece dicas essenciais para usar loops T-SQL, substituir cursores e desenvolver soluções relacionadas com o SQL do Synapse.
Objetivo dos loops WHILE
O SQL do Synapse dá suporte ao loop WHILE para executar repetidamente blocos de instrução. Esse loop WHILE continua enquanto as condições especificadas forem verdadeiras ou até que o código encerre especificamente o loop usando a palavra-chave BREAK.
Loops no SQL do Synapse são úteis para substituir cursores definidos no código SQL. Felizmente, quase todos os cursores escritos no código SQL são da variedade de avanço rápido e somente leitura. Portanto, os loops WHILE são uma ótima alternativa para substituir cursores.
Substituir cursores no SQL do Synapse
Antes de mergulhar, a seguinte pergunta deve ser considerada: "Este cursor poderia ser reescrito para usar operações baseadas em conjunto?" Em muitos casos, a resposta é sim e é frequentemente a melhor abordagem. Uma operação baseada em conjunto geralmente é executada mais rápido do que uma abordagem iterativa, linha por linha.
Cursores somente leitura de avanço rápido são facilmente substituídos por uma estrutura de repetição. O código seguinte é um exemplo simples. Este exemplo de código atualiza as estatísticas de cada tabela no banco de dados. Ao percorrer as tabelas no loop, cada comando é executado em sequência.
Primeiro, crie uma tabela temporária contendo um número de linha exclusivo usado para identificar as instruções individuais:
CREATE TABLE #tbl
WITH
( DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Sequence
, [name]
, 'UPDATE STATISTICS '+QUOTENAME([name]) AS sql_code
FROM sys.tables
;
Em segundo lugar, inicialize as variáveis necessárias para executar o loop:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Agora, faça um loop sobre instruções executando-as uma de cada vez:
WHILE @i <= @nbr_statements
BEGIN
DECLARE @sql_code NVARCHAR(4000) = (SELECT sql_code FROM #tbl WHERE Sequence = @i);
EXEC sp_executesql @sql_code;
SET @i +=1;
END
Por fim, solte a tabela temporária criada na primeira etapa
DROP TABLE #tbl;
Próximas Etapas
Para obter mais dicas de desenvolvimento, confira visão geral de desenvolvimento.