Sql--游标

在编程的过程中(无论是C、C++、C#还是其他语言)我们到处可以看到循环,但是在sql语句中却不常。原因很简单,因为我们在程序中可以利用其他语言循环调用sql,而不需要sql本身来进行循环。举个例子来说吧,假设现在要将Northwind数据库中的Categories表中的商品种类遍历一遍插入到Products表中(假设商品名称、供货商等信息和ProductID为1的数据完全一样,我们都随便插入),我们该怎么做呢。你可能只需要在其他语言中取出Categories中所有的数据,然后遍历其ID,执行插入语句就可以了。但如果我们根本没有程序,而只有一个数据库(这种情况是存在的,特别是数据库之间拷贝数据的时候)又或者你就是想要使用sql来完成,此时就可以使用游标了(游标的效率这里暂且不管)。例如上面说的情况,我们用游标来做:

DECLARE @categoryID INT --声明一个变量用作循环临时变量 DECLARE myCursor CURSOR FOR SELECT DISTINCT CategoryID FROM dbo.Categories --声明游标,指定游标作用之处 OPEN myCursor --打开游标 FETCH NEXT FROM myCursor INTO @categoryID --提取数据到变量 WHILE @@fetch_status=0 --遍历条件 BEGIN INSERT INTO dbo.Products ( ProductName , SupplierID , CategoryID , QuantityPerUnit , UnitPrice , UnitsInStock , UnitsOnOrder , ReorderLevel , Discontinued ) SELECT ProductName,SupplierID,@categoryID,QuantityPerUnit,UnitPrice, UnitsInStock,UnitsOnOrder,ReorderLevel,Discontinued FROM dbo.Products WHERE ProductID=1 FETCH NEXT FROM myCursor INTO @categoryID --提取下一条数据 END CLOSE myCursor --关闭游标 DEALLOCATE myCursor --释放游标  

你可能感兴趣的:(sql,编程,c,数据库,C#,语言)