设为首页 收藏本站
查看: 1543|回复: 0

[经验分享] SQL Server实现类似于自动刷新数据的功能

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-18 09:14:02 | 显示全部楼层 |阅读模式
在导数据入时,看不能进度条,总觉得不太放心,就定时查询某张表的行数,看是否有数据导入了,通常做法就是手动的按F5去执行来刷新数据。但是如果这个定时查询历时较长,10分钟,或半小时,手动的话费时费力。貌似SSMS没有像应用程序自动刷新的功能,可能是我还不知道有这样的功能,于是就写了一个类似自动刷新数据的脚本,需要手动中止程序的运行,当然也可以写个条件,自动结束语句的执行。

1
2
3
4
5
6
7
8
USE AdventureWorks2008R2
GO

WHILE (1=1)
BEGIN
    SELECT COUNT(*) FROM HumanResources.Employee
    WAITFOR DELAY '00:00:01'
END



Code-1

执行后发现等了很久,SSMS都没有返回数据,就一直执行下去。如果耐心等待下去,大约是1-2分钟,数据突然“嘣”的一下子就出来了,根本不是自己想要实现的效果(写到这里,想到了成龙大哥卖X王洗发水的广告深深的影响了我-_-!!)。是不是这种写法是不行的?现在就来测试下。


修改代码,如下:

1
2
3
4
5
WHILE (1=1)
BEGIN
     SELECT * FROM HumanResources.Employee     
     WAITFOR DELAY '00:00:01'
END



Code-2


成功了!为什么会这样?其实SSMS是一个很聪明的软件,因为返回的数据量很小,SSMS不会每查询一次,就即时显示出来,而是要有一定的数据量才会显示。
但是如果只需要查询行数,不是所有数据,在这里只需要稍为修改一下,增加返回(显示)的数据量就可以实现了。



1
2
3
4
5
6
WHILE (1=1)
BEGIN
    SELECT COUNT(*) FROM HumanResources.Employee   
    PRINT REPLICATE(1,4000)   
    WAITFOR DELAY '00:00:01'
END



Code-3

那么问题来了,究竟是多大数据,每次查询才会即时显示呢?把PRINT REPLICATE(1,4000)中4000修改为1000,执行语句,发现是每一次显示两行结果;修改为2000,有时一行,有时两行;修改为3000,一行的次稍多,修改为4000,可以了。得出结论,返回大于4000个字符时,SSMS会即时显示。


那么,新的问题又来了!每次SELECT查询都是隔开一行,有没有办法只显示最新的那个结果,或是只在一个表格中显示呢?


再继续修改代码,如下:

1
2
3
4
5
6
7
8
9
SET NOCOUNT ON;
WHILE (1=1)
BEGIN
    SELECT 'The count at ' + CONVERT(VARCHAR(20),GETDATE(),20)
    + ' is ==> ' + RTRIM(COUNT(*))  FROM HumanResources.Employee
    PRINT REPLICATE(' ',4000)
    WAITFOR DELAY '00:00:01'
END
SET NOCOUNT OFF;



Code-3

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

wKioL1bpgPqhrL_ZAABDawcLlu0044.jpg
Figure-1


wKioL1bpgSOyqLDVAADJ_8E9jOA517.jpg
Figure-2

这样就可以舒舒服服的看着SSMS自动地不停刷新数据,如果表的数据有变化,也会即时看到,也许能满足某些“特殊”的需求(我真的好无聊吧,研究这个没什么作用的东西)。


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




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-192340-1-1.html 上篇帖子: 安装sql 2005 闪退 连接到服务器失败。错误:0x80070424 下篇帖子: SQL Server启动的几种方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表