簡體   English   中英

Azure Synapse 中 Goto 的替代項是什么

[英]What is the alternate of Goto in Azure Synapse

我在 azure 突觸中使用 goto 來跳過某些代碼並跳轉到 label,它沒有按預期工作。 什么是替代品。

由於 Azure Synapse Analytics 不支持GOTO ,專用 SQL 池,您需要編寫不依賴GOTO的過程代碼。

這個例子取自GOTO 的幫助頁面,在正常的 SQL 服務器上工作得很好:

DECLARE @Counter int;  
SET @Counter = 1;  
WHILE @Counter < 10  
BEGIN   
    SELECT @Counter  
    SET @Counter = @Counter + 1  
    IF @Counter = 4 GOTO Branch_One --Jumps to the first branch.  
    IF @Counter = 5 GOTO Branch_Two  --This will never execute.  
END  
Branch_One:  
    SELECT 'Jumping To Branch One.'  
    GOTO Branch_Three; --This will prevent Branch_Two from executing.  
Branch_Two:  
    SELECT 'Jumping To Branch Two.'  
Branch_Three:  
    SELECT 'Jumping To Branch Three.';

這是在沒有GOTO的情況下重構的相同代碼,使用IF ELSE控制流語言和BEGIN END塊來包含多個語句並使用BREAK退出循環:

DECLARE @Counter INT;  

SET @Counter = 1;  
WHILE @Counter < 10  
BEGIN   
    SELECT @Counter  
    SET @Counter = @Counter + 1  
    IF @Counter = 4
    BEGIN
        SELECT 'Jumping To Branch One.'  
        
        SELECT 'Jumping To Branch Three.';
        BREAK
    END 
    IF @Counter = 5 
    BEGIN
        SELECT 'Jumping To Branch Two.'  
    END 
END

有多種方法可以做到這一點,例如將一些內部代碼編寫為函數或存儲過程。 這只是一個簡單的例子。 我不得不說,我已經很多年沒有在 SQL 代碼中編寫GOTO語句了,因為它往往會導致所謂的意大利面條代碼,並且很難調試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM