当前位置: 代码迷 >> Sql Server >> SQL数据库游标有关问题,求高手
  详细解决方案

SQL数据库游标有关问题,求高手

热度:80   发布时间:2016-04-24 08:58:19.0
SQL数据库游标问题,求高手
DECLARE @Batch_Num varchar(50)
DECLARE Batch_Num CURSOR --定义游标
FOR (
SELECT BatchNum from student where ID=44
) --查出条码需要匹配的批次号

OPEN Batch_Num; --打开游标
FETCH NEXT FROM Batch_Num INTO @Batch_Num; --循环将批次塞到变量@Batch_Num里面
WHILE @@FETCH_STATUS = 0
    BEGIN
        --将条码批次与SAP批次进行比较
        SELECT COUNT('A')  from teach Where DistNumber=@Batch_Num;
        FETCH NEXT FROM Batch_Num; --读取下一个批次
    END
CLOSE Batch_Num; --关闭游标
DEALLOCATE Batch_Num; --释放游标
GO


我现在是这样的,先从student 这个里面取出几行数据,然后取对应的Batchnum字段,然后进行游标,如果在teach这个表里面匹配的话,就记下来,我想在弄个变量,然后在最后一行的时候判断,如果这个匹配的行数操作

------解决思路----------------------
直接使用sql语句不行吗
------解决思路----------------------
-- 在原代码上改
DECLARE @totalCount int
DECLARE @count int
SET @totalCount = 0

DECLARE @Batch_Num varchar(50)
...
WHILE @@FETCH_STATUS = 0
    BEGIN
        --将条码批次与SAP批次进行比较
        SET @count = (SELECT COUNT('A')  from teach Where DistNumber=@Batch_Num);
        SET @totalCount = @totalCount + @count;
        FETCH NEXT FROM Batch_Num; --读取下一个批次
    END
...
GO

-- 同#1,为什么不用更简单的方式?
DECLARE @totalCount int
SET @totalCount = (
                    SELECT COUNT('A') -- 这个'A'比较莫名
                      FROM student s
                      JOIN teach t
                        ON t.DistNumber = s.Batch_Num
                     WHERE s.ID=44
                  )

------解决思路----------------------
SQL Server中能够不使用游标的,尽量不要使用游标,
非要使用游标的情况下,尽量使用FAST FORWARD 和 LOCAL属性。
  相关解决方案