首次在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行。有人能说明我的愚蠢之处吗?
答案 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')