2011-09-01 37 views
1

请大家帮忙。下面的查询不按预期工作。预计在@ 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 
+1

乍一看,这看起来像你可能不需要光标的东西。你能描述它打算做什么吗? –

+0

@Martin,它意味着来自CARDTABLE的COUNT(SerialNumb),而@count <> 1,插入到FORMTABLE中,但它一直重复插入。 – jenni

+1

我看到你已经为2个表添加了一些示例数据。现在你的光标试图根据这些数据来做什么? –

回答

0

我的确同意Martin的看法,你似乎根本不需要光标。简单的加入就足够了。

为什么要再次将数据存储在Form Table中?

+0

我希望两个表中每个serialnumb的计数相同@Nil – jenni

+0

您可以尝试Martin提供的查询,我认为这就是您所需要的。 –