电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SQL Server 7.0 入門(七)

瀏覽:144日期:2023-10-28 09:53:58
i.;;;;;;聲明游標在這一步中,需要指定游標的屬性和根據要求產生的結果集。有兩種方法可以指定一個游標。形式1;;(ANSI 92)DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSORFOR select_statement[FOR {READ ONLY | UPDATE ][OF column_list]}]形式2DECLARE cursor_name CURSOR[LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC][READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]FOR select_statement[FOR {READ ONLY | UPDATE ][OF column_list]}]INSENSITIVE關鍵字指明要為檢索到的結果集建立一個臨時拷貝,以后的數據從這個臨時拷貝中獲取。如果在后來游標處理的過程中,原有基表中數據發生了改變,那么它們對于該游標而言是不可見的。這種不敏感的游標不允許數據更改。SCROLL關鍵字指明游標可以在任意方向上滾動。所有的fetch選項(first、last、next、relative、absolute)都可以在游標中使用。如果忽略該選項,則游標只能向前滾動(next)。Select_statement指明SQL語句建立的結果集。Transact SQL語句COMPUTE、COMPUTE BY、FOR BROWSE和INTO在游標聲明的選擇語句中不允許使用。READ ONLY指明在游標結果集中不允許進行數據修改。UPDATE關鍵字指明游標的結果集可以修改。OF column_list指明結果集中可以進行修改的列。缺省情況下(使用UPDATE關鍵字),所有的列都可進行修改。LOCAL關鍵字指明游標是局部的,它只能在它所聲明的過程中使用。GLOBAL關鍵字使得游標對于整個連接全局可見。全局的游標在連接激活的任何時候都是可用的。只有當連接結束時,游標才不再可用。FORWARD_ONLY指明游標只能向前滾動。STATIC的游標與INSENSITIVE的游標是相同的。KEYSET指明選取的行的順序。SQL Server將從結果集中創建一個臨時關鍵字集。如果對數據庫的非關鍵字列進行了修改,則它們對游標是可見的。因為是固定的關鍵字集合,所以對關鍵字列進行修改或新插入列是不可見的。DYNAMIC指明游標將反映所有對結果集的修改。SCROLL_LOCK是為了保證游標操作的成功,而對修改或刪除加鎖。OPTIMISTIC指明哪些通過游標進行的修改或者刪除將不會成功。注意:· 如果在SELECT語句中使用了DISTINCT、UNION、GROUP BY語句,且在選擇中包含了聚合表達式,則游標自動為INSENSITIVE的游標。· 如果基表沒有唯一的索引,則游標創建成INSENSITIVE的游標。· 如果SELECT語句包含了ORDER BY,而被ORDER BY的列并非唯一的行標識,則DYNAMIC游標將轉換成KEYSET游標。如果KEYSET游標不能打開,則將轉換成INSENSITIVE游標。使用SQL ANSI-92語法定義的游標同樣如此,只是沒有INSENSITIVE關鍵字而已。;;;;;;;ii.;;;;;;打開游標打開游標就是創建結果集。游標通過DECLARE語句定義,但其實際的執行是通過OPEN語句。語法如下:OPEN { { [GLOBAL] cursor_name } | cursor_variable_name}GLOBAL指明一個全局游標。Cursor_name是被打開的游標的名稱。Cursor_variable_name是所引用游標的變量名。該變量應該為游標類型。在游標被打開之后,系統變量@@cursor_rows可以用來檢測結果集的行數。@@cursor_rows為負數時,表示游標正在被異步遷移,其絕對值(如果@@cursor_rows為-5,則絕對值為5)為當前結果集的行數。異步游標使用戶在游標被完全遷移時仍然能夠訪問游標的結果。;;;;;;iii.;;;;;;從游標中取值在從游標中取值的過程中,可以在結果集中的每一行上來回移動和處理。如果游標定義成了可滾動的(在聲明時使用SCROLL關鍵字),則任何時候都可取出結果集中的任意行。對于非滾動的游標,只能對當前行的下一行實施取操作。結果集可以取到局部變量中。Fetch命令的語法如下:FETCH [NEXT | PRIOR| FIRST | LAST | ABSOLUTE {n | @nvar} | RELATIVE {n | @nvar}]FROM [GLOBAL] cursor_name} | cursor_variable_name}[INTO @variable_name ][,……n]]NEXT指明從當前行的下一行取值。PRIOR指明從當前行的前一行取值。FIRST是結果集的第一行。LAST是結果集的最后一行。ABSOLUTE n表示結果集中的第n行,該行數同樣可以通過一個局部變量傳播。行號從0開始,所以n為0時不能得到任何行。RELATIVE n表示要取出的行在當前行的前n行或后n行的位置上。如果該值為正數,則要取出的行在當前行前n行的位置上,如果該值為負數,則返回當前行的后n行。INTO @cursor_variable_name表示游標列值存儲的地方的變量列表。該列表中的變量數應該與DECLARE語句中選擇語句所使用的變量數相同。變量的數據類型也應該與被選擇列的數據類型相同。直到下一次使用FETCH語句之前,變量中的值都會一直保持。每一次FETCH的執行都存儲在系統變量@@fetch_status中。如果FETCH成功,則@@fetch_status被設置成0。@@fetch_status為-1表示已經到達了結果集的一部分(例如,在游標被打開之后,基表中的行被刪除)。@@fetch_status可以用來構造游標處理的循環。例如:DECLARE @iname char(20), @fname char(20)OPEN author_curFETCH FIRST FROM author_cur INTO @iname, @fnameWHILE @@fetch_status = 0BEGINIF @fname = ‘Albert’PRINT “Found Albert Ringer”ELSEPrint “Other Ringer”FETCH NEXT FROM author_cur INTO @iname, @fnameEND;;;;;iv.;;;;;;關閉游標CLOSE語句用來關閉游標并釋放結果集。游標關閉之后,不能再執行FETCH操作。如果還需要使用FETCH語句,則要重新打開游標。語法如下:CLOSE [GLOBAL] cursor_name | cursor_variable_name;;;;;;;v.;;;;;;釋放游標游標使用不再需要之后,要釋放游標。DEALLOCATE語句釋放數據結構和游標所加的鎖。語法如下:DEALLOCATE [GLOBAL] cursor_name | cursor_variable_name;;;;;;;下面給出游標的一個完整的例子:;;;;;;;USE master;;;;;;;GO;;;;;;;CREATE PROCEDURE sp_BuildIndexes;;;;;;;AS;;;;;;;DECLARE @TableName sysname, @msg varchar(100), @cmd varchar(100);;;;;;;DECLARE table_cur CURSOR FOR;;;;;;;SELECT name FROM sysobjects WHERE type=’u’;;;;;;;OPEN table_cur;;;;;;;FETCH NEXT FROM table_cur INTO @TableName;;;;;;;;;;;;;;WHILE @@fetch_status = 0;;;;;;;BEGIN;;;;;;IF @@fetch_status = -2;;;;;CONTINUE;;;;;;SELECT @msg = “Building indexes for table”+@TableName+”…”;;;;;;PRINT @msg;;;;;;SELECT @cmd = “DBCC DBREINDEX (‘”+@TableName+”')”;;;;;;EXEC (@cmd);;;;;;PRINT “;;;;“;;;;;;FETCH NEXT FROM table_cur INTO @TableName;;;;;;;END;;;;;;;DEALLOCATE table_cur;;;;;;;GO;;;;;;;下面的腳本將為PUBS數據庫執行sp_BuildIndexes;;;;;;;USE pubs;;;;;;;GO;;;;;;;EXEC ap_BuildIndexes;;;;;;;注意:上面也是創建用戶定義的系統存儲過程的示例。使用臨時表;;;;;;;臨時表是在TempDB中創建的表。臨時表的名稱都以“#”開頭。臨時表的范圍為創建臨時表的連接。因為,臨時表不能在兩個連接之間共享,一旦連接關閉,臨時表就會被丟棄。如果臨時表被創建于存儲過程之中,則臨時表的范圍在存儲過程之中,或者被該存儲過程調用的任何存儲過程之中。如果需要在連接之間共享臨時表,則需要使用全局的臨時表。全局的臨時表以“##”符號開頭,它將一直存在于數據庫中,直到SQL Server重新啟動。一旦這類臨時表創建之后,所有的用戶都可以訪問到。在臨時表上不能明確地指明權限。;;;;;;;臨時表提供了存儲中間結果的能力。有時候,臨時表還能通過將一個復雜的查詢分解成兩個查詢而獲得性能的改善。這可以通過首先將第一個查詢的結果存在臨時表中,然后在第二個查詢中使用臨時表來實現。當一個大表中的某個子集在一個在座過程中使用多次時,建議使用臨時表。在這種情況下,在臨時表中保持數據的子集,以在隨后的連接中使用,這樣能大大改善性能。還可以在臨時表中創建索引。
標簽: Sql Server 數據庫
主站蜘蛛池模板: 100_150_200_250_300_350_400公斤压力空气压缩机-舰艇航天配套厂家 | 首页 - 张店继勇软件开发工作室| 微型气泵-真空-蠕动-水泵-厂家-深圳市品亚科技有限公司 | 贵州成人高考网_贵州成考网 | 液氮罐(生物液氮罐)百科-无锡爱思科 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 广东西屋电气有限公司-广东西屋电气有限公司| 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 打包钢带,铁皮打包带,烤蓝打包带-高密市金和金属制品厂 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 四合院设计_四合院装修_四合院会所设计-四合院古建设计与建造中心1 | 集装箱标准养护室-集装箱移动式养护室-广州璟业试验仪器有限公司 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 挤出熔体泵_高温熔体泵_熔体出料泵_郑州海科熔体泵有限公司 | 数显恒温培养摇床-卧式/台式恒温培养摇床|朗越仪器 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 专业生产动态配料系统_饲料配料系统_化肥配料系统等配料系统-郑州鑫晟重工机械有限公司 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面 | 熔体泵|换网器|熔体齿轮泵|熔体计量泵厂家-郑州巴特熔体泵有限公司 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 华溶溶出仪-Memmert稳定箱-上海协烁仪器科技有限公司 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 找果网 | 苹果手机找回方法,苹果iPhone手机丢了找回,认准找果网! | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 动力配电箱-不锈钢配电箱-高压开关柜-重庆宇轩机电设备有限公司 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | CE认证_FCC认证_CCC认证_MFI认证_UN38.3认证-微测检测 CNAS实验室 |