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. Fortunatamente, quasi tutti i cursori scritti nel codice SQL sono della varietà di sola lettura e a scorrimento veloce. 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 rapidi di sola lettura vengono facilmente sostituiti con una struttura 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 utilizzato 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 esegui un ciclo sulle istruzioni, eseguendole 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.