這篇文章主要介紹了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
但是推薦明確刪除,這樣有利於系統
遊標也有局部和全域兩種型別
局部遊標:只在宣告階段使用
全域遊標:可以在宣告它們的過程,觸發器外部使用
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
但是推薦明確刪除,這樣有利於系統
遊標也有局部和全域兩種型別
局部遊標:只在宣告階段使用
全域遊標:可以在宣告它們的過程,觸發器外部使用
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
但是推薦明確刪除,這樣有利於系統
遊標也有局部和全域兩種型別
局部遊標:只在宣告階段使用
全域遊標:可以在宣告它們的過程,觸發器外部使用
if CURSOR_STATUS('global','游标名称') =-3 and CURSOR_STATUS('local','游标名称') =-3 begin print 'not exists' end
以上是介紹Sql Server臨時表和遊標實例用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!