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