首頁  >  文章  >  資料庫  >  總結Sql Server臨時表和遊標的使用方法

總結Sql Server臨時表和遊標的使用方法

巴扎黑
巴扎黑原創
2017-05-21 18:38:271315瀏覽

這篇文章主要介紹了Sql Server臨時表和遊標的使用小結,需要的朋友可以參考下

1.臨時表

離開表與永久表相似,但臨時表儲存在tempdb 中,不再使用時會自動刪除。
臨時表有局部和全域兩種型別

2者比較:

局部暫存表的名稱以符號(#) 打頭
僅對目前的使用者連線是可見的
當使用者實例斷開連線時被自動刪除
全域臨時表的名稱以符號(##) 打頭
任何使用者都是可見的
當所有引用表格的使用者在斷開連線時被自動刪除
其實局部暫存表在tempdb是有唯一名稱的
例如我們用sa登陸一個查詢分析器,再用sa登陸另一個查詢分析器

在2個查詢分析器我們都允許下面的語句:


use pubs
go
select * into #tem from jobs

分別為2個使用者建立了2個局部臨時表
我們可以從下面的查詢語句可以看到


SELECT * FROM [tempdb].[dbo].[sysobjects] 
where xtype='u'

判斷臨時表的存在性:


##

if object_id('tempdb..#tem') is not null 
begin 
 print 'exists' 
end 
else 
begin 
 print 'not exists' 
end

特別提示:1。在動態sql語句中建立的局部臨時表,在語句運行完畢後就自動刪除了
所以下面的語句是無法得到結果集的


exec('select * into #tems from jobs')
select * from #tems

2。在儲存過程中用到的臨時表在過程運行完畢後會自動刪除

但是推薦明確刪除,這樣有利於系統

ii。遊標

遊標也有局部和全域兩種型別
局部遊標:只在宣告階段使用
全域遊標:可以在宣告它們的過程,觸發器外部使用

判斷存在性:



if CURSOR_STATUS('global','游标名称') =-3 and CURSOR_STATUS('local','游标名称') =-3 
begin 
 print 'not exists' 
end
SELECT * FROM [tempdb].[dbo].[sysobjects] where xtype='u'

判斷臨時表的存在性:



if object_id('tempdb..#tem') is not null 
begin 
 print 'exists' 
end 
else 
begin 
 print 'not exists' 
end

特別提示:

1。在動態sql語句中建立的局部臨時表,在語句運行完畢後就自動刪除了
所以下面的語句是無法得到結果集的


exec('select * into #tems from jobs')
select * from #tems

2。在儲存過程中用到的臨時表在過程運行完畢後會自動刪除

但是推薦明確刪除,這樣有利於系統

ii。遊標

遊標也有局部和全域兩種型別
局部遊標:只在宣告階段使用
全域遊標:可以在宣告它們的過程,觸發器外部使用

判斷存在性:



if CURSOR_STATUS('global','游标名称') =-3 and CURSOR_STATUS('local','游标名称') =-3 
begin 
 print 'not exists' 
end
SELECT * FROM [tempdb].[dbo].[sysobjects] where xtype='u'

判斷臨時表的存在性:


if object_id('tempdb..#tem') is not null 
begin 
 print 'exists' 
end 
else 
begin 
 print 'not exists' 
end

特別提示:

1。在動態sql語句中建立的局部臨時表,在語句運行完畢後就自動刪除了
所以下面的語句是無法得到結果集的


exec('select * into #tems from jobs')
select * from #tems

2。在儲存過程中用到的臨時表在過程運行完畢後會自動刪除

但是推薦明確刪除,這樣有利於系統

ii。遊標

遊標也有局部和全域兩種型別
局部遊標:只在宣告階段使用
全域遊標:可以在宣告它們的過程,觸發器外部使用

判斷存在性:



if CURSOR_STATUS('global','游标名称') =-3 and CURSOR_STATUS('local','游标名称') =-3 
begin 
 print 'not exists' 
end

以上是總結Sql Server臨時表和遊標的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn