Azure Synapse Analytics'te ayrılmış SQL havuzları için T-SQL döngülerini kullanma

Bu makalede, T-SQL döngülerini kullanarak ve imleçleri değiştirerek ayrılmış SQL havuzu çözümü geliştirmeye yönelik ipuçları verilmiştir.

WHILE döngülerinin amacı

Azure Synapse'deki ayrılmış SQL havuzları, deyim bloklarını tekrar tekrar yürütmek için WHILE döngüsünü destekler. Bu WHILE döngüsü, belirtilen koşullar doğru olduğu sürece veya kod break anahtar sözcüğünü kullanarak döngünün özel olarak sonlandırılıncaya kadar devam eder.

Döngüler, SQL kodunda tanımlanan imleçleri değiştirmek için kullanışlıdır. Neyse ki, SQL koduyla yazılmış neredeyse tüm imleçler hızlı ve salt okunur çeşitliliğe sahip. Bu nedenle WHILE döngüleri, imleçleri değiştirmek için harika bir alternatiftir.

Ayrılmış SQL havuzundaki imleçleri değiştirme

Ancak, önce kafanıza dalmadan önce kendinize şu soruyu sormalısınız: "Bu imleç, küme tabanlı işlemleri kullanmak için yeniden yazılabilir mi?"

Çoğu durumda yanıt evet olur ve genellikle en iyi yaklaşımdır. Küme tabanlı bir işlem genellikle yinelemeli, satır satır yaklaşımından daha hızlı çalışır.

Hızlı ileriye doğru salt okunur imleçler döngü yapısıyla kolayca değiştirilebilir. Aşağıdaki örnek basit bir örnektir. Bu kod örneği, veritabanındaki her tablonun istatistiklerini güncelleştirir. Döngüdeki tabloları yineleyerek her komut sırayla yürütülür.

İlk olarak, tek tek deyimleri tanımlamak için kullanılan benzersiz bir satır numarası içeren geçici bir tablo oluşturun:

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
;

İkinci olarak, döngünün gerçekleştirilmesi için gereken değişkenleri başlatın:

DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
,       @i INT = 1
;

Şimdi bunları teker teker yürüten deyimleri döngüye alın:

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

Son olarak, ilk adımda oluşturulan geçici tabloyu bırakın

DROP TABLE #tbl;

Sonraki adımlar

Daha fazla geliştirme ipucu için bkz. geliştirmeye genel bakış.