日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常用的sql server 函数、存储过程、临时表总结

發布時間:2024/6/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常用的sql server 函数、存储过程、临时表总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近寫T-sql語句比較多, 想把這段時間遇到過的貌似有用的一些sql server的函數,存儲過程,臨時表等總結一下,以便不時之需,當然不會一下子所有都總結,但會分段總結;

?

1)存儲過程定義:

?

create proc [proc_name] @para_1 nvarchar(250), @para_2 int=1, @para_3 nchar(10) output as

?

上面這段sequal就是創建一個名為proc_name的存儲過程,她接受兩個輸入參數,分別為@para_1和有默認值為1的@para_2,且返回一個nchar類型的值;
@para_2 int=1, 指明了@para_2參數在調用該存儲過程時可以不提供,系統會給個默認值為1;
@para_3 nchar(10) output, 說明@para_3是一個輸出參數,存儲過程可以指明多個輸出參數,如還可以在后面加一個輸出參數:@para_4 bit output,要在退出存儲過程前給她賦值,如果不賦值她一直保持為null;
可以像下面那樣去調用:

declare @arg_3 nchar(10) exec proc proc_name 'staff_001',0,@arg_3 output-- 或者不指供有默認值的para_2, 如 declare @arg_3 nchar(10) exec proc proc_name 'staff_001',@arg_3 output

?

?

?

2)臨時表:

2種臨時表,分別為:全局,局部
全局和局部和平時學的編程語言里的全局變量和局部變量語義是一樣,只是意思上有點差別;
如全局臨時表一旦創建了,她就像一個普通的表一樣,只要創建她的那個連接未斷開,當前任何的連接都可以訪問該全局臨時表,如果創建她的連接斷開了,那么已經引用她的其它任務,可以繼續引用她,但新的任務或連接不能再引用她,一旦沒有任何任務引用她時,該臨時表即被系統釋放掉;
局部臨時表只能在創建她的任務里引用, 比喻創建了一個連接,如平時那樣連接上一個數據庫,然后創建一個臨時表,那么該臨時表,可能被在該連接里的所有任務引用,但如果在該連接里的某個存儲過程創建,則只在被該存儲過程引用,其它存儲過程或函數(這些統稱為任務)都不能引用她;

創建全局臨時表, 全局臨時表都是以##開頭的,這是sql server 內定的,不能改:

create table [##g_temp_name](staff_no nvarchar(250) primary key,staff_name nvarchar(250) null,state int default 0) -- 或者 select * into [##g_temp_name] from real_table-- 或者 exec('select * into [##g_temp_name] from real_table')

?

?

上面3種試創建的全局臨時表效果是一樣的,只要連接未斷開,都可以像訪問普通表一樣訪問她:

?

select * from ##g_temp_name-- orexec('select * from ##g_temp_name')

?

?

?

?

創建局部臨時表, 局部臨時表都以單個#開頭的,也是sql server 內定的:

?

create table [#temp_name](staff_no nvarchar(250) primary key,staff_name nvarchar(250) not null,state int default 0)-- 或者 select * into #temp_name from real_table-- 或者exec ('select * into #temp_name from real_table')

?

?

?

?

注意局部臨時表只能在一個批處理里有效,如用第3種方式創建的局部臨時表,是無法在這個批外面訪問到的,所以用字符串拼接方式創建的臨時表,意義不大,除非訪問臨時表也拼接到該字符串里去;
如果確實要用到拼接字符串也作查詢數據的,這里有兩個解決方案,一個是用全局臨時表放到拼接字符串里,因為全局臨時表一旦創建了,只要連接還沒斷開都可以隨便訪問的,如:

?

exec ('select field_1, field_2 into ##g_temp_name from real_table') select * from ##g_temp_name

?

?

?

?

當然用全局臨時表,有個缺點是當前的任務連接都可以訪問到她,所以當出現并發訪問時,就出問題了,可能會被另一個連接把她的數據修改了。下面有另一種解決方案可以完美的處理這種問題,就是用局部臨時表,但局部臨時表不寫的拼接字符串去,而把拼接字符串查詢語句返回的記錄插入到局部臨時表里, 這種方法屢試不爽:

?

create table #temp_name(staff_no nvarchar(250))insert into #temp_name exec('select field_1 from real_table') -- 再擴展一下 select * into #temp_name_2 from real_table_2 A where A.field_1 in(select B.staff_no from #temp_name where B.staff_no <> '') -- select * from #temp_name_2

?

?

?

在寫存儲過程時經常用到臨時表,如果對一個臨時表名只用一次,可以不手動刪除它,在調用完存儲過程系統自動會把它刪除,但如果要多只用到,有時就要進行手動刪除了,如果刪除了一個不存在的臨時表,系統會報錯的,所以在手動刪除前最好判斷該臨時表是否存在;
臨時表都不保存在當前數據庫的,而是在tempdb里,所以刪除時要注意:

?

if object_id('tempdb..[#temp_name]') is not null begindrop table [#temp_name] end

?

?

?

3) 游標:
游標是很有用的工作,特別是用在逐行訪問表里的記錄時,就像C#里的foreach一樣,對一個集合進行迭代訪問,但游標卻特耗資源,如能不用盡量不要用,只有在用其它方法無法做到,或做起來特麻煩時就要考慮用游標了; 創建一個游標:

?

declare [cursor_name] cursor from select staff_no, staff_name from real_table-- 聲明兩個用來存儲no 和name的變量 declare @staff_no nvarchar(250), @staff_name nvarchar(250)-- 打開游標 open [cursor_name]-- 移動游標到第一行 fetch [cursor_name] into @staff_no, @staff_name-- 判斷游標是否已迭代完@@fetch_status = 0說明還未完 while @@FETCH_STATUS = 0 begin-- Do something with @staff_no, @staff_name-- 繼續移動游標到下一行fetch [cursor_name] into @staff_no, @staff_name end-- 關閉游標 close [cursor_name] -- 釋放資源 deallote [cursor_name]

?

?

?

******說明: 方括號指的是要創建的對象名稱:如[cursor_name]可以自定義名為my_cur_name,不要加方括號;還有游標的名字前不要加其它修飾符,如@my_cur_name或#my_cur_name, 單純my_cur_name就可以了******

轉載于:https://www.cnblogs.com/grissom007/archive/2012/11/07/2878327.html

總結

以上是生活随笔為你收集整理的常用的sql server 函数、存储过程、临时表总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩一区二区三区 | 日韩aa| 天天免费看av | 中日一级片 | 日韩精品一区二区三区视频 | 中文字幕一区二区三区在线视频 | 中文字幕中文在线 | 美女少妇毛片 | 久久精品这里只有精品 | 92久久精品一区二区 | 亚洲欧美自拍另类 | 午夜高潮视频 | 国产做爰全过程免费视频 | 韩国av在线播放 | 精品国产乱子伦一区二区 | 亚洲无限观看 | 人妻无码一区二区三区 | 天天射一射 | 久久中文视频 | 国产精品一级片在线观看 | 91插视频 | 特色黄色片 | 亚洲v | 亚洲精品成人久久 | wwwxxx亚洲| 91在线观看喷潮 | 日本三级理论片 | 波多av在线| 91色吧| ,国产精品国产三级国产 | 婷婷综合网站 | 欧美黄页网站 | 成人三级在线看 | 午夜男人网 | 欧色丰满女同hd | 17c国产精品一区二区 | 欧美做爰猛烈床戏大尺度 | 午夜爽爽爽视频 | 丁香婷婷六月天 | 国产视频91在线 | 波多一区 | 亚洲视频91| 娇妻av| 欧美图片自拍偷拍 | 中文字幕日日夜夜 | 麻豆网站在线 | 禁久久精品乱码 | 91精品国产91久久久久久 | 男人添女人下部高潮视频 | 麻豆网| 有码在线播放 | www.色com| 啊v视频在线观看 | 亚洲精品中文字幕乱码三区 | 成年人免费视频播放 | 日韩成人av在线 | 爱蜜臀av| av网站免费在线播放 | 九九久久国产精品 | 999免费 | 久草在在线 | 日b免费视频 | 国产伦精品一区二区三区照片91 | 51 吃瓜网| 亚洲一区二区三区人妻 | 顶级毛茸茸aaahd极品 | 成人午夜在线 | www国产91 | 国产精品腿扒开做爽爽爽挤奶网站 | 秋霞视频一区二区 | 中文字幕一区二区人妻在线不卡 | 美女扒开内裤让男人捅 | 黄色片网站在线免费观看 | 色悠悠视频| 一级特黄aaa | 欧美永久精品 | 中文字幕在线免费看线人 | 亚洲五月婷婷 | 日本视频免费看 | 6080电视影片在线观看 | 波多野结衣电影在线播放 | 欧美老女人视频 | 亚洲乱码国产乱码精品精大量 | 国产成人精品女人久久久 | 日韩午夜片 | 性欧美丰满熟妇xxxx性久久久 | 日日日干 | 最好看的中文字幕 | 亚洲精品一区二区在线观看 | 韩国女同性做爰三级 | 日日碰狠狠添天天爽无码 | 亚洲自拍偷拍一区二区三区 | 狠狠干狠狠撸 | 一区二区三区精品免费视频 | 蜜乳av 懂色av 粉嫩av | 波多野结衣50连登视频 | 强伦人妻一区二区三区视频18 | 国产极品视频 | 国产日韩精品一区二区三区在线 |