迭代循环内的游标循环不按预期工作

时间:2011-09-01 09:22:49

标签: sql tsql sql-server-2008 cursor

请帮忙。以下查询未按预期工作。当@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 SerialNumb=@SerialNumb
          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 :(得分:0)

我同意马丁的观点,看来你根本不需要光标。一个简单的连接就足够了。

为什么要再次在表单表中存储数据?