Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce suggerimenti essenziali per l'uso di cicli T-SQL, la sostituzione dei cursori e lo sviluppo di soluzioni correlate con Synapse SQL.
Scopo dei cicli WHILE
Synapse SQL supporta il ciclo WHILE per l'esecuzione ripetuta di blocchi di istruzioni. Questo ciclo WHILE continua finché le condizioni specificate sono vere o fino a quando il codice termina in modo specifico il ciclo usando la parola chiave BREAK.
I cicli in Synapse SQL sono utili per sostituire i cursori definiti nel codice SQL. Per fortuna, quasi tutti i cursori scritti in codice SQL sono del tipo avanzamento rapido, di sola lettura. Pertanto, i cicli WHILE sono un'ottima alternativa per sostituire i cursori.
Sostituire i cursori in Synapse SQL
Prima di immergersi, è necessario considerare la domanda seguente: "È possibile riscrivere questo cursore per usare operazioni basate su set?" In molti casi, la risposta è sì ed è spesso l'approccio migliore. Un'operazione basata su set viene spesso eseguita più velocemente rispetto a un approccio iterativo, riga per riga.
I cursori ad avanzamento rapido di sola lettura si possono facilmente sostituire con un costrutto di ciclo. Il codice seguente è un semplice esempio. In questo esempio di codice vengono aggiornate le statistiche per ogni tabella del database. Iterando sulle tabelle nel ciclo, ogni comando viene eseguito in sequenza.
Prima di tutto, creare una tabella temporanea contenente un numero di riga univoco usato per identificare le singole istruzioni:
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
;
In secondo luogo, inizializzare le variabili necessarie per eseguire il ciclo:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Ora eseguire un ciclo delle istruzioni, una alla volta:
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
Eliminare infine la tabella temporanea creata nel primo passaggio
DROP TABLE #tbl;
Passaggi successivi
Per altri suggerimenti sullo sviluppo, vedere Panoramica dello sviluppo.