[英]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.