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王洗發水的廣告深深的影響了我-_-!!)。是不是這種寫法是不行的?現在就來測試下。

 

修改代碼,如下:

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

 

成功了!為什么會這樣?其實SSMS是一個很聰明的軟件,因為返回的數據量很小,SSMS不會每查詢一次,就即時顯示出來,而是要有一定的數據量才會顯示。
但是如果只需要查詢行數,不是所有數據,在這里只需要稍為修改一下,增加返回(顯示)的數據量就可以實現了。

 

代碼如下:

WHILE 1=1
BEGIN
    SELECT COUNT(*) FROM HumanResources.Employee
    PRINT REPLICATE(1,4000)
    WAITFOR DELAY '00:00:01'
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM