我正在使用SQL Server并尝试构建嵌套游标。 (我知道游标不是最好的做事方式,但我不能提出任何其他解决方案。)
所以第一个Cursor正在通过临时表## Flanschbreite将FlanschMin捕获到一个变量中。它工作正常。但是内部游标应该通过将FlanschMin捕获到变量@ FL2中来做同样的事情。我想创建一个临时表,它结合了这两个变量的所有可能组合。外部游标工作正常,但内部游标不通过临时表,它只返回第一个条目。我认为@@ 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
...
答案 0 :(得分:1)
您在哪里声明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