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属性。