MSSQLSERVER数据库- 游标
游标是属于级行操作,遍历一个表一行一行读,而SQL查询是基于数据集的,在数据量大的时候,使用游标会降低查询速度。这是很明显的。但是有些操作就用游标实现。所以游标又是不或缺少的。我很久都没用游标了,一时我也不记得怎么写,只记得游标操作一般三步。
1.定义一个游标,将查询的数据放到在这游标中
2.打开游标
3.在WHILE里遍历游标,当状态不是0的时候表明没有记录了。
在网上找了个很好的例子,记在这里,以便下次查阅
--申明一个游标 DECLARE MyCursor CURSOR FOR SELECT TOP 5 FBookName,FBookCoding FROM TBookInfo --打开一个游标 OPEN MyCursor --循环一个游标 DECLARE @BookName nvarchar(2000),@BookCoding nvarchar(2000) FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding WHILE @@FETCH_STATUS =0 BEGIN print 'name'+@BookName FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding END --关闭游标 CLOSE MyCursor --释放资源 DEALLOCATE MyCursor
我还实战了一把,将表里某些指定的数据更新,需要用到SQL语句的判断表是否存这句:
if exists (select * from sys_boardRight where Account=@Account)
print 'yes';
else
print 'no';
--申明一个游标 DECLARE MyCursor CURSOR FOR SELECT Account from rtx where department like '%集团\春天\%' --打开一个游标 OPEN MyCursor --循环一个游标 DECLARE @Account nvarchar(50) -- FETCH NEXT FROM MyCursor INTO @Account WHILE @@FETCH_STATUS =0 BEGIN if exists (select * from sys_boardRight where Account=@Account) print 'no' else Insert into sys_boardRight(Account,Rights) values(@Account,2) FETCH NEXT FROM MyCursor INTO @Account END --关闭游标 CLOSE MyCursor --释放资源 DEALLOCATE MyCursor