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
;
抱歉,如果标题不清楚。基本上我正在尝试将 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
;