嵌套游标 TSQL(SQL 服务器)
nested Cursor TSQL (SQL Server)
我正在使用 SQL 服务器并尝试构建嵌套游标。 (我知道游标不是做事的最佳方式,但我想不出任何其他解决方案)。
所以第一个 Cursor 正在经历一个临时 Table ##Flanschbreite 并将 FlanschMin 捕获到一个变量中。它工作正常。但是内部游标应该通过将 FlanschMin 捕获到变量 @FL2 中来做同样的事情。我想创建一个临时 table 来组合这两个变量的所有可能组合。外部光标工作正常,但内部光标不通过临时 table,它只是 returns 第一个条目。我认为 @@FetchStatus 有问题。
有什么明显的我做错了吗?
(抱歉我的英语不好,我不是母语人士)
DECLARE curFL1 CURSOR FOR
SELECT FlanschMin FROM ##FlanschBreite;
OPEN curFL1
FETCH next FROM curFL1 INTO @FL1
WHILE @@Fetch_Status = 0
BEGIN
SELECT FlanschMin FROM ##FlanschBreite;
OPEN curFL2
FETCH next FROM curFL2 INTO @FL2
WHILE @@Fetch_Status = 0
BEGIN
SET @IDFLansch += 1
INSERT INTO ##FlanschZuweisung (IDFZ, FL1, FL2) VALUES (@IDFlansch, @FL1, @FL2)
FETCH next FROM curFL2
END
CLOSE curFL2
DEALLOCATE curFL2
FETCH next FROM curFL1 INTO @FL1
END
CLOSE curFL1
DEALLOCATE curFL1
我的##Flanschzuweisung 成绩:
IDFZ\ FL1\ FL2
1\ 6\ 6
2\ 8\ 6
3\ 10\ 6
4\ 6\ 6
5\ 8\ 6
...
我需要的是:
IDFZ\ FL1\ FL2
1\ 6\ 6
2\ 8\ 6
3\ 10\ 6
4\ 6\ 8
5\ 8\ 8
6\ 10\ 8
7\ 6\ 10
...
你在哪里申报curFL2
?
但是无论如何,这似乎是一个简单的 CROSS JOIN 加上一个 ROW_NUMBER:
-- INSERT INTO ##FlanschZuweisung (IDFZ, FL1, FL2)
SELECT row_number() over (order by t1.FlanschMin, t2. FlanschMin),
t1.FlanschMin, t2. FlanschMin
FROM ##FlanschBreite as t1 CROSS JOIN ##FlanschBreite as t2
我正在使用 SQL 服务器并尝试构建嵌套游标。 (我知道游标不是做事的最佳方式,但我想不出任何其他解决方案)。
所以第一个 Cursor 正在经历一个临时 Table ##Flanschbreite 并将 FlanschMin 捕获到一个变量中。它工作正常。但是内部游标应该通过将 FlanschMin 捕获到变量 @FL2 中来做同样的事情。我想创建一个临时 table 来组合这两个变量的所有可能组合。外部光标工作正常,但内部光标不通过临时 table,它只是 returns 第一个条目。我认为 @@FetchStatus 有问题。
有什么明显的我做错了吗? (抱歉我的英语不好,我不是母语人士)
DECLARE curFL1 CURSOR FOR
SELECT FlanschMin FROM ##FlanschBreite;
OPEN curFL1
FETCH next FROM curFL1 INTO @FL1
WHILE @@Fetch_Status = 0
BEGIN
SELECT FlanschMin FROM ##FlanschBreite;
OPEN curFL2
FETCH next FROM curFL2 INTO @FL2
WHILE @@Fetch_Status = 0
BEGIN
SET @IDFLansch += 1
INSERT INTO ##FlanschZuweisung (IDFZ, FL1, FL2) VALUES (@IDFlansch, @FL1, @FL2)
FETCH next FROM curFL2
END
CLOSE curFL2
DEALLOCATE curFL2
FETCH next FROM curFL1 INTO @FL1
END
CLOSE curFL1
DEALLOCATE curFL1
我的##Flanschzuweisung 成绩:
IDFZ\ FL1\ FL2
1\ 6\ 6
2\ 8\ 6
3\ 10\ 6
4\ 6\ 6
5\ 8\ 6
...
我需要的是:
IDFZ\ FL1\ FL2
1\ 6\ 6
2\ 8\ 6
3\ 10\ 6
4\ 6\ 8
5\ 8\ 8
6\ 10\ 8
7\ 6\ 10
...
你在哪里申报curFL2
?
但是无论如何,这似乎是一个简单的 CROSS JOIN 加上一个 ROW_NUMBER:
-- INSERT INTO ##FlanschZuweisung (IDFZ, FL1, FL2)
SELECT row_number() over (order by t1.FlanschMin, t2. FlanschMin),
t1.FlanschMin, t2. FlanschMin
FROM ##FlanschBreite as t1 CROSS JOIN ##FlanschBreite as t2