请大家帮忙。下面的查询不按预期工作。预计在@ count = 1时停止插入,但不会停止。我无法弄清楚问题所在,请帮助我。迭代循环内光标不按预期方式工作
create procedure mypro
as
declare @count int
declare aa cursor
for select SerialNumb from FORMTABLE
open aa
declare @SerialNumb varchar(11)
fetch next from aa into @SerialNumb
while(@@FETCH_STATUS<>-1)
begin
if(@@FETCH_STATUS <>-2)
select @count= COUNT(SerialNumb) from CARDTABLE where [email protected]
while (@count<>1)
begin
---- variables declaration
declare @name
declare @location
declare @status
select @name = name, @location = location, @status=status
from FORMTABLE where SerialNumb = @SerialNumb
insert into FORMTABLE values(@name, @location, @status)
set @count = @count-1
end
fetch next from aa into @SerialNumb
end
close aa
deallocate aa
参见样本数据如下:
DECLARE @FormTable TABLE
(
Serialnumb INT,
[GROUP] CHAR(1),
CLASS VARCHAR(50)
)
INSERT INTO @FormTable
SELECT 400,'A','Science' UNION ALL
SELECT 401,'B','Social science' UNION ALL
SELECT 402,'C','philosophy' UNION ALL
SELECT 403,'D','Engineering'
CardTable
DECLARE @CardTable TABLE
(
Id INT PRIMARY KEY,
Serialnumb INT,
Name VARCHAR(50)
)
INSERT INTO @CardTable
SELECT 1,400,'Charey' UNION ALL
SELECT 2,400,'Mike' UNION ALL
SELECT 3,400,'James' UNION ALL
SELECT 4,401,'Vina' UNION ALL
SELECT 5,400,'Gloria' UNION ALL
SELECT 6,401,'Faith' UNION ALL
SELECT 7,401,'Sarah' UNION ALL
SELECT 8,402,'Joy' UNION ALL
SELECT 9,402,'Rita'
期望的结果应该是:
@FormTable
Serialno Group Class
400 A Science
401 B Social science
402 C philosophy
403 D Engineering
400 A Science
400 A Science
400 A Science
401 B Social science
401 B Social science
402 C philosophy
乍一看,这看起来像你可能不需要光标的东西。你能描述它打算做什么吗? –
@Martin,它意味着来自CARDTABLE的COUNT(SerialNumb),而@count <> 1,插入到FORMTABLE中,但它一直重复插入。 – jenni
我看到你已经为2个表添加了一些示例数据。现在你的光标试图根据这些数据来做什么? –