游标内的迭代循环未按预期工作
请帮忙。下面的查询未按预期工作。当 @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
please help. The query below is not working as expected. It is expected to stop inserting when @count=1 but it doesn't stop. i can't figure out what the problem is , please help me out.
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
See sample data below:
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'
The desired result should be:
@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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我确实同意马丁的观点,看来你根本不需要光标。一个简单的连接就足够了。
为什么要再次在表单中存储数据?
I do agree with Martin, it seems you don't need cursor at all. A simple join would be suffice.
Why do you want to store data in your Form Table again?