ÔÚSqlServer´æ´¢¹ý³ÌÖÐʹÓÃCursor£¨Óα꣩²Ù×÷¼Ç¼
1. ΪºÎʹÓÃÓα꣺
ʹÓÃÓαê(cursor)µÄÒ»¸öÖ÷ÒªµÄÔÒò¾ÍÊǰѼ¯ºÏ²Ù×÷ת»»³Éµ¥¸ö¼Ç¼´¦Àí·½Ê½¡£ÓÃSQLÓïÑÔ´ÓÊý¾Ý¿âÖмìË÷Êý¾Ýºó£¬½á¹û·ÅÔÚÄÚ´æµÄÒ»¿éÇøÓòÖУ¬ÇÒ½á¹û
ÍùÍùÊÇÒ»¸öº¬Óжà¸ö¼Ç¼µÄ¼¯ºÏ¡£Óαê»úÖÆÔÊÐíÓû§ÔÚSQL serverÄÚÖðÐеطÃÎÊÕâЩ¼Ç¼£¬°´ÕÕÓû§×Ô¼ºµÄÒâÔ¸À´ÏÔʾºÍ´¦ÀíÕâЩ¼Ç¼¡£
2. ÈçºÎʹÓÃÓα꣺
Ò»°ãµØ£¬Ê¹ÓÃÓα궼×ñÑÏÂÁеij£¹æ²½Ö裺
(1) ÉùÃ÷Óαꡣ°ÑÓαêÓëT-SQLÓï¾äµÄ½á¹û¼¯ÁªÏµÆðÀ´¡£
(2) ´ò¿ªÓαꡣ
(3) ʹÓÃÓαê²Ù×÷Êý¾Ý¡£
(4) ¹Ø±ÕÓαꡣ
2.1. ÉùÃ÷Óαê
DECLARE CURSORÓï¾äSQL-92±ê×¼Óï·¨¸ñʽ£º
DECLARE ÓαêÃû [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR sql-statement
Eg:
Declare MycrsrVar Cursor
FOR Select * from tbMyData
2.2 ´ò¿ªÓαê
OPEN MycrsrVar
µ±Óα걻´ò¿ªÊ±£¬ÐÐÖ¸Õ뽫ָÏò¸ÃÓα꼯µÚ1ÐÐ֮ǰ£¬Èç¹ûÒª¶ÁÈ¡Óα꼯ÖеĵÚ1ÐÐÊý¾Ý£¬±ØÐëÒÆ¶¯ÐÐÖ¸ÕëʹÆäÖ¸ÏòµÚ1ÐС£¾Í±¾Àý¶øÑÔ£¬¿ÉÒÔʹÓÃÏÂÁвÙ×÷¶ÁÈ¡µÚ1ÐÐÊý¾Ý£º
FETCH FIRST from E1cursor
»ò FETCH NEXT from E1cursor
2.3 ʹÓÃÓαê²Ù×÷Êý¾Ý
ÏÂÃæµÄʾÀýÓÃ@@FETCH_STATUS¿ØÖÆÔÚÒ»¸öWHILEÑ»·ÖеÄÓαê»î¶¯
/* ʹÓÃÓαê¶ÁÈ¡Êý¾ÝµÄ²Ù×÷ÈçÏ¡£*/
DECLARE E1cursor cursor /* ÉùÃ÷Óα꣬ĬÈÏΪFORWARD_ONLYÓαê */
FOR SELECT * from c_example
OPEN E1cursor /* ´ò¿ªÓαê */
FETCH NEXT from E1cursor /* ¶ÁÈ¡µÚ1ÐÐÊý¾Ý*/
WHILE @@FETCH_STATUS = 0 /* ÓÃWHILEÑ»·¿ØÖÆÓαê»î¶¯ */
BEGIN
FETCH NEXT from E1cursor /* ÔÚÑ»·ÌåÄÚ½«¶ÁÈ¡ÆäÓàÐÐÊý¾Ý */
END
CLOSE E1cursor /* ¹Ø±ÕÓαê */
DEALLOCATE E1cursor &
Ïà¹ØÎĵµ£º
²éѯnorthwindÊý¾Ý¿âÖÐordersÖеÄ10µ½20Ìõ¼Ç¼
select top 10 * from orders
where orderid > ( select max(orderid) from (select top 10 orderid from orders order by orderid) as t&nbs ......
select case when c.colid=1 then object_name(c.id) else '' end as ±íÃû
,c.name as ×Ö¶ÎÃû
,t.name Êý¾ÝÀàÐÍ
,c.prec as ³¤¶È ......
ÊÂÎñµÄ¹¦ÄÜÔÚsqlserverÖÐÓÉÀ´ÒѾã¬ÒòΪ×î½üÔÚ×öÒ»¸öÊý¾Ýͬ²½·½°¸£¬ËùÒÔÓлú»áÔÙ´ÎÑо¿Ò»ÏÂËüÒÔ¼°¿ìÕյȣ¬·¢ÏÖ»¹ÊÇÓкܶ಻´íµÄ¹¦Äܺ͸ĽøµÄ¡£ÕâÀïÒÔsqlserver2008µÄÊÂÎñ·¢²¼¹¦ÄÜΪÀý£¬¶Ô·¢²¼¶©Ôĵķ½Ê½¼òÒª½éÉÜһϲÙ×÷Á÷³Ì£¬Ò»·½Ãæ×ö¸ö×ܽᱸ·Ý£¬Ò»·½ÃæÓë´ó¼Ò½øÐÐһϷÖÏíºÍ½»Á÷¡£·Ñ»°¾Í² ......
½ñÌìÔÚдÊÓͼʱ£¬Óöµ½Òª°ÑDatetimeÀàÐÍתVarcharÀàÐÍ¡£ÒÔǰÔÚORALCE¾ÍÈÝÒ×£¬Ö±½ÓToChar(getdate(),'yyyy-mm-dd')¡£ÔÚSQL Server 2005
select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08
select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12
select CONVERT(varchar(12) , getdate(), 112 )
200 ......
create database DB
use DB
--רҵ±í
create table major
(spno char(5) not null primary key,
spname varchar(20) not null,
pno char(2) )
--ѧÉú±í
create table student
(sno char(7) not null primary key,
sname varchar(20) not null,
ssex char(2) not null,
sag ......