gpt4 book ai didi

SQL WHILE 循环

转载 作者:行者123 更新时间:2023-12-05 03:14:56 24 4
gpt4 key购买 nike

我一直致力于在 SQL 中创建嵌套 while 循环,但 while 循环存在问题。我认为主要问题是我的外循环。有什么建议么?

USE HW_DB;
IF OBJECT_ID('dbo.PythagoreanTriangles') IS NOT NULL
DROP TABLE dbo.PythagoreanTriangles;
GO

CREATE TABLE PythagoreanTriangles
(
Side1 INT NOT NULL,
Side2 INT NOT NULL,
Hypotenuse FLOAT NOT NULL
);

DECLARE @side1 AS INT = 1;
DECLARE @side2 AS INT = 1;
DECLARE @count AS INT = 1;
DECLARE @element AS INT = 0;

WHILE (@side1 = @count)
BEGIN
WHILE @side2 <= 10 BEGIN
INSERT INTO dbo.PythagoreanTriangles
VALUES (@side1, @side2, SQRT((@side2 * @side2) + (@side1 * @side1)));
UPDATE dbo.PythagoreanTriangles SET Hypotenuse = ROUND(Hypotenuse, 2)

SET @side2 = @side2 + 1;
SET @count = @count + 1;
SET @element = @element + 1;

IF @element = 10
BEGIN
SET @side1 = @side1 + 1;
SET @element = 0;

END;
END;
END;

输出应该如下所示:

1 1 1.41
1 2 2.24
1 3 ...
1 4 ...
1 5
1 6
1 7
1 8
1 9
1 10
2 2
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 10
…………
…………等

9 9
9 10
10 10

最佳答案

您可以使用单个插入来完成此操作,并且我总是建议尽可能避免循环/游标。

WITH Numbers AS
( SELECT TOP 10 Number = ROW_NUMBER() OVER(ORDER BY object_id)
FROM sys.all_objects
)
INSERT dbo.PythagoreanTriangles (Side1, Side2, Hypotenuse)
SELECT Side1 = a.Number,
Side2 = b.Number,
Hypotenuse = ROUND(SQRT(POWER(a.Number, 2) + POWER(b.Number, 2)), 2)
FROM Numbers a
CROSS JOIN Numbers b;

Example on SQL Fiddle


虽然要真正回答你的问题,但你的循环在一次迭代后退出,因为你有这种情况:

WHILE (@side1 = @count) 

@side2 1 - 10 的第一次迭代后,您执行 SET @side1 = @side1 + 1;。由于 @Count = 1,并且 @Side1 现在为 2,您的 WHILE 谓词不再为真,因此外部循环退出。虽然我不提倡这种方法,但要使循环正常工作,您需要更改外部 while 谓词。也许是这样的:

DECLARE @side1 AS INT = 1;
DECLARE @side2 AS INT = 1;

WHILE (@side1 <= 10)
BEGIN
WHILE @side2 <= 10
BEGIN
INSERT INTO dbo.PythagoreanTriangles
VALUES (@side1, @side2, SQRT((@side2 * @side2) + (@side1 * @side1)));
UPDATE dbo.PythagoreanTriangles SET Hypotenuse = ROUND(Hypotenuse, 2)

SET @side2 = @side2 + 1;
END;

SET @side2 = 1;
SET @side1 = @side1 + 1;
END;

Example on SQL Fiddle

关于SQL WHILE 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com