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