3、一个有意思的小例子
虽然知道了游标的概念和基本用法,但对于什么时候用游标还很模糊,甚至误认为游标可以被子查询所代替。直到遇到了这个有意思的小例子:表结构如下:
题目要求是:列出从事同一种工作但属于不同部门的雇员的不同组合
即如下结果:
在想尽了子查询、表连接、建临时表等等办法之后,我发现我遇到了一个不可逾越的障碍:无法排除两个名字组合的唯一性。即:我得到的结果可能是如下
最终我们用游标,代码如下:
SELECT A.Ename AS ANAME, B.Ename AS BNAME INTO #t FROM EMP A JOIN EMP B ON A.job = B.job AND A.deptNo <> B.deptNo and A.Ename<>b.Ename ORDER BY ANAME --DROP TABLE #t DECLARE TEST_CURSOR CURSOR FOR SELECT ANAME, BNAME FROM #t OPEN TEST_CURSOR DECLARE @ANAME VARCHAR(20) DECLARE @BNAME VARCHAR(20) FETCH NEXT FROM TEST_CURSOR INTO @ANAME, @BNAME DELETE FROM #t WHERE ANAME=@BNAME AND BNAME=@ANAME WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM TEST_CURSOR INTO @ANAME, @BNAME DELETE FROM #t WHERE ANAME=@BNAME AND BNAME=@ANAME END CLOSE TEST_CURSOR DEALLOCATE TEST_CURSOR SELECT * FROM #t
以上就是游标的一些简单介绍,其实工作中不到万不得已,一般不会使用游标,因为对于数据量大的表使用游标,那执行效率绝对是个灾难。
SQL讲究的是简单才是王道,切勿为了追求什么骚操作把数据库给整垮了,切记!
——End——