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