臨時表初識心得

Hello,你們的云云又來嘍~

最近,在做Winform相關項目,使用DataGridView控件顯示篩選後的數據,並且要定時更新顯示數據。實際情況需要在獲取到數據開始一直監測數據的變化。

設計思路:比如說我們做一個當天的跟蹤監測零下溫度天氣變化的顯示,一旦溫度爲零下就加入到顯示列表,即使溫度變化爲零上也繼續跟蹤顯示。這時候需要用到全局臨時表##Temp_NoSeatVoteList,我們只需要在狀態爲0時候將其加入到全局臨時表中,定時獲取滿足篩選條件的數據後進行比對,新的數據對全局臨時表進行插入,已經存在的數據進行更新,滿足刪除條件的數據進行刪除即可滿足監測顯示需求。

注意點:全局臨時表每次會話結束,就會被系統釋放,如果多次請求,建議使用永久表作爲中間表使用。

知識點

  • 本地臨時表,全局臨時表

臨時表與永久表相似,可以對數據進行增刪改查,但臨時表存儲在Tempdb中,當不再使用時會自動刪除。

本地臨時表:一個#開頭#Temp_LocalLists;僅創建的數據庫連接可以訪問;連接關閉,立馬釋放資源。

全局臨時表:兩個#開頭##Temp_GlobalLists;創建後對任何數據庫連接都是可見的,當多個連接同時訪問,如果創建連接關閉的同時,另一個連接沒有在使用全局臨時表,那麼##Temp_GlobalLists會被釋放掉;可以使用with(xlock)排他鎖來告訴系統另一個連接在使用;當事務完畢或者會話結束,則系統釋放資源。

由於臨時表利用了數據庫臨時表空間,由數據庫系統自動進行維護,所以節省了數據庫表空間。臨時表空間一般使用的是虛擬內存,大大減少了硬盤I/O次數,因此也提高了系統效率。

  • 判斷全局臨時表是否存在

if object_id('Tempdb..##Temp_DataList')is  null

print '不存在'

else

print '存在'

  • 創建全局臨時表

create table ##Temp_DataList

(

  ID int,

  Degree nvarchar(10),

  State nvarchar(10),

UpdateTime datetime

);

  • 刪除全局臨時表

if object_id('Tempdb..##Temp_DataList')is not null     

begin

drop table ##Temp_DataList

end

  • 新增表數據

insert into ##Temp_DataList select ID,Degree,State from ZeroDegree

where not exists(select * from  ##Temp_DataList where ##Temp_DataList.ID= ZeroDegree.ID);

  • 刪除表數據

delete from ##Temp_DataList where dateadd(day, 1, UpdateTime) < getdate();

  • 更新表數據

update ##Temp_DataList set Degree=n.Degree from ##Temp_DataList

left join ZeroDegree n on n.ID =##Temp_DataList.ID

where  ##Temp_DataList.Degree!=n.Degree;

  • 查找表數據

select * from ##Temp_DataList;

 

學習地址:

臨時表詳解:https://www.cnblogs.com/baili-luoyun/p/11100644.html

臨時表刪除:https://www.cnblogs.com/lonelyxmas/p/7980073.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章