繁体   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