Multiple Line If Body translation planned to be delivered in the future.
This is a deprecated version of the SnowConvert documentation, please visit the official site HERE.
Severity
Medium
Description
Translation for if statements that contain a Begin ... End block inside their body is not supported yet for the entire statement block. Instead, this EWI and a Select Null are added.
Code Example
Input Code:
CREATE OR ALTER FUNCTION [PURCHASING].[FOO](@status INT)Returns INTAsBegindeclare @result asint=10; SELECT @result = quantity FROM TABLE1 WHERE COL1 = @status; IF @result =3 BEGIN IF @result>0 SELECT @result=0 ELSE SELECT @result=1 SELECT @result =1 ENDreturn @result;End
Output Code:
CREATE OR REPLACE FUNCTION PURCHASING.FOO (STATUS FLOAT)Returns INTLANGUAGE SQLAS$$ WITH CTE1 AS ( SELECT10AS RESULT ), CTE2 AS ( SELECT quantity AS RESULT FROM TESTS.TABLE1 WHERE COL1 = STATUS ), CTE6 AS ( SELECT CASE WHEN ( SELECT RESULT FROM CTE2 ) =3 THEN (SELECT/*** MSC-ERROR - MSCEWI4049 - TRANSLATION FOR MULTIPLE LINE IF BODY IS PLANNED TO BE DELIVERED IN THE FUTURE ***//*SELECT @result = 1*/null FROM ( SELECT/*** MSC-ERROR - MSCEWI4049 - TRANSLATION FOR MULTIPLE LINE IF BODY IS PLANNED TO BE DELIVERED IN THE FUTURE ***//*IF @result > 0 SELECT @result = 0 ELSE SELECT @result = 1*/null ) T1) END AS RESULT ) SELECT RESULT FROM CTE6$$;
Manual Support
Case 1: Single Statement
For these cases, the transformation would be straightforward, since the transformed statement would appear in a select clause
IF @result =0BEGIN SET @result =1END
CASE WHEN (SELECT RESULT FROM CTE2)=0 THEN( SELECT 1AS RESULT )
Case 2: Multiple Statements
For cases in which multiple statements are being transformed, we should transform the N Statement, and use it as the source table for the N+1 Statement.
IF @result =0BEGIN Statement1 Statement2 Statement3END
CASE WHEN (SELECT RESULT FROM CTE2)=0 THEN( SELECT TransformedStatement3 FROM ( SELECT TransformedStatement2 FROM ( SELECT TransformedStatement1 ) T1 ) T2)
Case 3: Multiple set statements
For these cases, it will be necessary to replicate a transformation for each set statement.
IF @result =0BEGIN SET @var1 =1 SET @var2 =3 SET @var3 = @var2END
WITH CTE1 AS ( SELECT CASE WHEN (SELECT RESULT FROM CTE0) =0 THEN (SELECT 1) AS VAR1)WITH CTE2 AS ( SELECT CASE WHEN (SELECT RESULT FROM CTE0)=0 THEN (SELECT 3) AS VAR2)WITH CTE3 AS ( SELECT CASE WHEN (SELECT RESULT FROM CTE0)=0 THEN (SELECT T1.VAR2 FROM ((SELECT 3) AS VAR2) AS T1) AS VAR3) ...