SQL实现类似于自动刷新数据的功能

发表于:2015-8-17 09:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:FishParadise    来源:51Testing软件测试网采编

#
SQL
分享:
  有时需要在SQL中,定时刷新某张表,比如说是要定时查询某张表的行数,通常做法就是手动的按F5去执行来刷新数据。但是如果这个定时查询历时较长,10分钟,或半小时,手动的话肯定是要崩溃了。貌似SQL没有像应用程序自动刷新的功能,可能是我还不知道有这样的功能,于是就写了一个类似自动刷新数据的脚本,需要手动中止程序的运行,当然也可能写个条件,自动结束语句的执行。
  代码:
  1 USE AdventureWorks2008R2
  2 GO
  3
  4 WHILE 1=1
  5 BEGIN
  6     SELECT COUNT(*) FROM HumanResources.Employee
  7     WAITFOR DELAY '00:00:01'
  8 END
  执行后发现等了很久,SSMS都没有返回数据,就一直执行下去。如果耐心等待下去,大约是1-2分钟,数据突然“嘣”的一下子就出来了,根本不是自己想要实现的效果(写到这里,想到了成龙大哥卖X王洗发水的广告深深的影响了我-_-!!)。是不是这种写法是不行的?现在就来测试下。
  修改代码,如下:
  1 WHILE 1=1
  2 BEGIN
  3     SELECT * FROM HumanResources.Employee
  4     WAITFOR DELAY '00:00:01'
  5 END
  成功了!为什么会这样?其实SSMS是一个很聪明的软件,因为返回的数据量很小,SSMS不会每查询一次,就即时显示出来,而是要有一定的数据量才会显示。
  但是如果只需要查询行数,不是所有数据,在这里只需要稍为修改一下,增加返回(显示)的数据量就可以实现了。
  代码如下:
  1 WHILE 1=1
  2 BEGIN
  3     SELECT COUNT(*) FROM HumanResources.Employee
  4     PRINT REPLICATE(1,4000)
  5     WAITFOR DELAY '00:00:01'
  6 END
  那么问题来了,究竟是多大数据,每次查询才会即时显示呢?把PRINT REPLICATE(1,4000)中4000修改为1000,执行语句,发现是每一次显示两行结果;修改为2000,有时一行,有时两行;修改为3000,一行的次稍多,修改为4000,可以了。得出结论,返回大于4000个字符时,SSMS会即时显示。
  那么,新的问题又来了!每次SELECT查询都是隔开一行,有没有办法只显示最新的那个结果,或是只在一个表格中显示呢?
  再继续修改代码,如下:
1 SET NOCOUNT ON;
2
3 WHILE 1=1
4 BEGIN
5     SELECT 'The count at ' + CONVERT(VARCHAR(20),GETDATE(),20) + ' is ==> ' + RTRIM(COUNT(*)) FROM HumanResources.Employee
6     PRINT REPLICATE(' ',4000)
7     WAITFOR DELAY '00:00:01'
8 END
9
10 SET NOCOUNT OFF;
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号