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

原文: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;

执行前,记得按Ctrl + T,或者点击SSMS的菜单命令,把执行结果以Text的格式显示。

实际效果如下:

这样就可以舒舒服服的看着SSMS自动地不停刷新数据,如果表的数据有变化,也会即时看到,也许能满足某些“特殊”的需求(貌似没什么实际作用-_-!!)。

好吧,关于WAITFOR语句的详细介绍,请参考:https://msdn.microsoft.com/en-us/library/ms187331%28v=sql.105%29.aspx

时间: 2024-12-25 18:48:37

SQL实现类似于自动刷新数据的功能的相关文章

自己动手打造工具系列之自动刷新简历

0×00 背景 话说搞安全的大佬们都非常忙,自己在一步一步成长中无暇顾及其他琐碎的事情,比如让猎头注意到各位大佬.如何让猎头和大厂注意到自己呢?第一.提高自己在整个行业的曝光度:第二.定时刷新自己的简历:还有第三,第四等等,各位发挥脑洞.针对第一点,很多大佬各有自己的办法,但是针对第二点其实我们有全自动化的解决方案,可以为自己相对地节约点时间.小弟今天就带来自己动手打造工具系列之自动刷新简历.本文主要是针对喜欢写工具的童鞋提供一些思路,并一步一步地分析思路和方法,起一个抛砖引玉的作用吧. 0×0

(十五)在controller之外修改$scope中的数据,双向绑定特性失效,不能自动刷新

在angularjs中通过angular.element(dom).scope()可以拿到某个dom元素关联的作用域,从而可以访问$scope中的属性和方法.但是在ng-controller函数之外修改$scope中的数据,angular的$scope是不会自动刷新的,即双向绑定特性失效. <html> <head> <script src="angular-1.3.15.js"></script> <script> var

如何做页面自动刷新,又不用让用户按回车键来提交数据!

假设叶面中有如下form: <form name=InputDate> ... </form> 如果页面要自动刷新,但该页面有Request.Form,那么通常会出现一个提示框,需要用户确定来提交数据,这就不是自动 刷新了.而对于监控或股票显示来说,不要用户干预又非常重要,下面就可以解决该问题: <Script Language="JavaScript"> <!-- var limit="0:60" //定义刷新时间 if

AngularJS:实现页面滚动到底自动加载数据的功能

要实现这个功能,可以通过https://github.com/sroze/ngInfiniteScroll这个第三方控件来实现.步骤如下: 1. 下载ng-infinite-scroll.js程序http://sroze.github.io/ngInfiniteScroll/ 目前版本是1.0.0 2. 如果你是用的jQuery2.0以上版本,还需要修改ng-infinite-scroll.js程序,将所有的将所有的$window.xxx改为$(window).xxx, elem.xxx改为$(

[开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究

1. 几个重要的类列表: a) Designer工程下的CommonBindingDialog.cs: b) Designer工程下的NumericBindingPanel.cs(或者StringBindingPanel.cs): 2. 通道数据与控件属性关联(以及自动刷新机制): a) 通道数据与控件属性绑定: CommonBindingDialog.cs中的事件响应方法(Create association按钮被按下): private void CreateAssociationButto

Servlet实现自动刷新功能

使用Servlet实现自动刷新功能,每一秒钟在浏览器输出一个随机数字. package chensi.com; import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servle

页面实现验证码功能,点击“注册”按钮后,无论是否完成注册,验证码都能够自动刷新

要求页面实现验证码功能,点击"注册"按钮后,无论是否完成注册,验证码都能够自动刷新 <script> function validteCode() { var codes = new Array(4);       // var colors = new Array("Red","Green","Gray","Blue","Maroon","Aqua",&

SQL server 数据查询功能 中

查询数据 排序 查询结果集通常是按照id排序的,也就是根据主键排序.这也是大部分数据库的做法.如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句. 例如按照成绩从低到高进行排序: SELECT id, name, gender, score FROM students ORDER BY score; 如果要反过来,按照成绩从高到底排序,我们可以加上DESC表示"倒序": SELECT id, name, gender, score FROM students ORDER B

sharepoint2010人性化的地方--员工离职AD账号禁用(个人网站自动提醒上级经理功能)

sharepoint2010人性化的地方--员工离职AD账号禁用(个人网站自动提醒上级经理功能) 最近有个项目,每个员工都开通了个人网站,但是有些员工离职后禁用AD账号后自动给该员工的个人属性中的“上级经理”指定的经理发一份提醒邮件如下: XXX/Hunk 的“我的网站”已计划在 14 天内删除.作为他们的经理,您现在是其网站的临时所有者.此临时所有权使您可以访问该网站,复制您可能需要的与企业相关的任何信息.若要访问该网站,请使用以下 URL:http://mysite.xxx.com/pers