我的光标和输出
SET NOCOUNT ON
DECLARE @vendor_id int, @vendor_name nvarchar(50)
DECLARE @subvendor_id int, @subvendor_name nvarchar(50)
PRINT '-------- Vendor Products Report --------'
DECLARE vend_cursor CURSOR FOR SELECT * FROM MYSEQ
OPEN vend_cursor
FETCH NEXT FROM vend_cursor
INTO @vendor_id, @vendor_name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' '
-- Declare an inner cursor based
-- on vendor_id from the outer cursor.
DECLARE product_cursor CURSOR FOR SELECT * FROM MYSEQ
OPEN product_cursor
FETCH NEXT FROM product_cursor INTO @subvendor_id,@subvendor_name
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@subvendor_id >3)
SELECT * FROM MYSEQ WHERE SQLID =@subvendor_id
FETCH NEXT FROM product_cursor INTO @subvendor_id,@subvendor_name
END
CLOSE product_cursor
DEALLOCATE product_cursor
-- Get the next vendor.
FETCH NEXT FROM vend_cursor INTO @vendor_id, @vendor_name
END
CLOSE vend_cursor
DEALLOCATE vend_cursor
alt text http://www.freeimagehosting.net/uploads/10f5e2fe4e.png
问题
我在多行值中得到答案。我需要像行集合一样 像这样
4 text4
5 text5
(也不应包含重复记录)
编辑:这只是示例查询。我需要做很多条件。这就是我写这样的原因。
编辑光标
我需要在日期重叠记录......
RowId, CheckIn, CheckOut
1 10 AM 2 PM
2 10.30 AM 11.30 AM
3 8 AM 9 AM
我想只选择重叠记录以及多少重叠对... 这就是为什么我选择多光标
答案 0 :(得分:2)
暂时忘记在SQL中使用游标......
在任何语言中,为什么要声明内部循环与外部循环具有相同的迭代?在这种情况下,两个游标都基于SELECT * FROM MYSEQ
。
答案 1 :(得分:1)
@@ FETCH_STATUS是一个可用于连接上所有游标的全局变量,因此当嵌套游标完成时,它会将全局变量设置为-1(表示行的结尾),外部循环也将终止。 见https://msdn.microsoft.com/en-GB/library/ms187308.aspx
答案 2 :(得分:0)
我发生了三件事。
我认为这是你正在进行的一些测试。但是您已经定义了两个游标来执行完全相同的查询。这就是为什么你可能会获得重复行的一个原因。当然,你的问题缺乏明确的商业逻辑,这使我们很难理解你想要实现的目标。
第二个是,你有一个嵌套循环,循环遍历另一个表的记录中的一个表的记录。但是你忽略了将内部光标选择的行与外部光标的当前行连接起来。因此,vend_cursor
中的每一行都将获取product_cursor
中完全相同的行集。
最后,product_cursor
未按distinct
关键字排序或过滤。鉴于前两点,这可能无关紧要。我只是为了完整起见而提到它。