我對我們的SQL Server 2000數據庫有了很長的查詢,並且我返回了由C#應用程序進一步處理的結果。SQL Server 2000「收益回報」結果行爲
考慮這個查詢:
declare @sn varchar(20)
select distinct serial_number
from manufacturingData
where '7/19/2012'<date_time
order by serial_number
while (0 < (select count(serial_number) from #sn)) begin
select top 1 @sn=serial_number from #sn
exec sp_GetSnData @sn
delete from #sn where [email protected]
end
drop table #sn
我寫上07/19/2012
此查詢,所以它只是從今天返回的記錄。
上面的查詢(今天的一半)返回了119個不同的序列號,並花費了52秒鐘來執行伴隨它的while循環。
通常情況下,此報告執行30天,並且有大約3500個零件編號。
有沒有辦法「掛鉤」結果集,以便我可以在生成結果時訪問結果?
現在的樣子,沒有人知道查詢是要花2分鐘還是2天......或者它還在做任何事情!經理關閉他的電腦並回家過一天,或者這個報告查詢是否完成?
一旦單個表被返回,那麼我需要分別處理每個表。
這將是很好,如果我能
- 找出多少返回了不同的項目,
- 目前正在查詢什麼項目,
- 有可用的結果表在等待處理下一張桌子進來
這可能嗎?
僅供參考:我目前通過向我們的服務器發送單個請求來在Windows窗體中執行此操作,但這會使服務器陷入困境並耗盡所有可用的連接。
時間到了哪裏?選擇不同來填充臨時表或執行存儲過程?當然,遊標會比臨時表和循環更有效率,但不會更多... – 2012-07-19 20:41:48
選擇獨特只需要幾秒鐘。存儲過程一直在吃東西。 – jp2code 2012-07-19 20:42:58
[DTS包](http://msdn.microsoft.com/en-us/library/cc917688.aspx)可用於執行現有循環,並在每次迭代中排隊消息或發送電子郵件。您可以將其與登臺表結合起來,以達到您的三點要點,儘管這看起來像是一種不雅而且可能很脆弱的解決方案。 – 2012-07-19 21:08:57