iT邦幫忙

0

關於SQL Server在預存程序之中,使用記憶體暫存資料表

sql

我在ASP.NET的網頁中, 使用到一個SQL預存程序去Select
但是SQL預存程序會動態產生一個Table ##TmpTable1
跑完預存程序時會自動刪掉Table ##TmpTable1

可是在事件檢視器中 (應用程式 -> ASP.NET )
每天大約會跳1~5次警告

資料庫中已經有一個名為 '##TmpTable1' 的物件。 於 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

請問該如何防止同一個SQL預存程序
在同一時間內多重執行?
或是有其它的解法?

6
charmmih
iT邦研究生 5 級 ‧ 2012-06-29 00:49:25
最佳解答

SQL預存程序會動態產生一個Table ##TmpTable1

用##TmpTable1全域暫存表格, 當第1個執行此一預存程序時, 再來的第2個執行此一預存程序會出現一個名為 '##TmpTable1' 的物件;
應該考慮用區域暫存表格 #TmpTable1, 才可避免不同連線出現要開同一暫存表格的錯誤.

ps: 在開暫存表格前, 應先再考慮是否有合適的索引可取代; 畢竟開暫存表格還要再維護資料.

player iT邦大師 1 級 ‧ 2012-06-29 16:51:04 檢舉

## 是全域暫存表

是區域暫存表

這樣喔? 那我記錯了

我之前以為 ## 是放在RAM之中的區域暫存表

2
otis
iT邦新手 5 級 ‧ 2012-06-29 08:46:00

你可以將TmpTable1用亂數產生,這樣就可避免有重覆表格。

2
mrhsieh
iT邦好手 4 級 ‧ 2012-06-29 10:26:39

那段connection跑完後有下Close語法嗎?
如果有的話SQL的Session應該會被關閉,Session關閉後Global Table就會被刪除掉了。

我要發表回答

立即登入回答