SQL 服务器脚本到 Teradata Bteq 的转换

SQL Server script to Teradata Bteq conversion

抱歉,如果标题不清楚。基本上我正在尝试将 SQl 服务器脚本重写为 Teradata Bteq 。我无法在 Bteq 中使用 while 循环。请帮忙。

DECLARE @LOADID smallint
DECLARE @MAXLOADID smallint 
DECLARE @VALUE_S numeric(10,0)
DECLARE @VALUE_E numeric(10,0)

SET @LOADID = (SELECT MINLOADID
               FROM   dbo.LOADID_AUD)

SET @MAXLOADID = (SELECT MAXLOADID
                  FROM   dbo.LOADID_AUD)

WHILE @LOADID <= @MAXLOADID
BEGIN
    BEGIN TRANSACTION 

    SET @VALUE_S = (SELECT VALUE_S
                    FROM   dbo.LOADID_AUD_INCR
                    WHERE  LOADIDID = @LOADID)

    SET @VALUE_E = (SELECT VALUE_E
                    FROM   dbo.LOADID_AUD_INCR
                    WHERE  LOADIDID = @LOADID)

    INSERT INTO dbo.TEST_INCR WITH (TABLOCKX)
                    (,LOADID, CL2, CL3, CL4, CL5, CL6, CL7, CL8)
        SELECT 
            @LOADID AS LOADIDID, CL2, CL3, CL4, CL5, CL6, CL7, CL8
        FROM    
            TEST_FACT TF
        WHERE   
            TF.VALUE BETWEEN @VALUE_S AND @VALUE_E

    COMMIT TRANSACTION

    SET @LOADID = @LOADID + 1
END

这应该是作为单个语句的循环:

INSERT INTO dbo.TEST_INCR 
                    (LOADID, CL2, CL3, CL4, CL5, CL6, CL7, CL8)
WITH cte AS
 ( -- loop rewritten
   SELECT LOADID, VALUE_S, VALUE_E
   FROM   dbo.LOADID_AUD_INCR
   WHERE  LOADID BETWEEN (SELECT MINLOADID
                          FROM   dbo.LOADID_AUD)
                     AND (SELECT MAXLOADID
                          FROM   dbo.LOADID_AUD)
 )
        SELECT 
            cte.LOADID, CL2, CL3, CL4, CL5, CL6, CL7, CL8
        FROM    
            TEST_FACT AS TF
        JOIN cte
          ON TF.VALUE BETWEEN cte.VALUE_S AND cte.VALUE_E
;