没有记录插入使用WHILE函数来生成多个新记录

时间:2019-02-22 22:08:56

标签: sql-server

首次在SQL中使用WHILE函数。我已经浏览了很多帖子,试图找出我做错了什么,但是还没有发现。

DECLARE @BeginTagNo INT
        SELECT @BeginTagNo = (SELECT MIN(BEGINTAGNO) FROM dbo.INLoadTagReconciliation WHERE BEGINTAGNO <> 0 AND TYPE = 1 AND TRACTCODE = '00099-023-F')
DECLARE @EndTagNo INT
        SELECT @EndTagNo = (SELECT MAX(ENDTAGNO) FROM dbo.INLoadTagReconciliation WHERE ENDTAGNO <> 0 AND TYPE = 1 AND TRACTCODE = '00099-023-F')
DECLARE @id INT
        SELECT @BeginTagNo = (SELECT MIN(BEGINTAGNO) FROM dbo.INLoadTagReconciliation WHERE BEGINTAGNO <> 0 AND TYPE = 1 AND TRACTCODE = '00099-023-F')     

WHILE @id >= @BeginTagNo and @id <= @EndTagNo

BEGIN
    insert INTO workINLoadTagReconciliation values(@id,null,null)
    select @id = @id+1
END

当我运行上述命令时,表中什么都没有输入。 运行此命令时:

SELECT @BeginTagNo = (SELECT MIN(BEGINTAGNO) FROM dbo.INLoadTagReconciliation WHERE BEGINTAGNO <> 0 AND TYPE = 1 AND TRACTCODE = '00099-023-F')

您将返回2021901。

运行此命令时:

SELECT @EndTagNo = (SELECT MAX(ENDTAGNO) FROM dbo.INLoadTagReconciliation WHERE ENDTAGNO <> 0 AND TYPE = 1 AND TRACTCODE = '00099-023-F')

您将返回2022600。@id变量与@BeginTagNo相同。我希望从中生成一张表,该表具有从2021901到2022600的699行。有人能说明我的愚蠢之处吗?

1 个答案:

答案 0 :(得分:0)

忘记循环。 试试;

INSERT INTO workINLoadTagReconciliation 
SELECT BEGINTAGNO, NULL, NULL
FROM dbo.INLoadTagReconciliation
WHERE BEGINTAGNO >= 
    (SELECT MIN(BEGINTAGNO) FROM dbo.INLoadTagReconciliation 
      WHERE BEGINTAGNO <> 0 AND TYPE = 1 AND TRACTCODE = '00099-023-F')
AND BEGINTAGNO <= 
    (SELECT MAX(ENDTAGNO) FROM dbo.INLoadTagReconciliation 
      WHERE ENDTAGNO <> 0 AND TYPE = 1 AND TRACTCODE = '00099-023-F')