sql server的臨時表有本地臨時表和全域性臨時表之分,在聯機叢書中這樣描述:
有本地和全域性兩種型別的臨時表,二者在名稱、可見性和可用性上均不相同。本地臨時表的名稱以單個數字符號 (#) 打頭;它們僅對當前的使用者連線是可見的;當使用者從 microsoft® sql server™ 2000 例項斷開連線時被刪除。全域性臨時表的名稱以數學符號 (##) 打頭,建立後對任何使用者都是可見的,當所有引用該錶的使用者從 sql server 斷開連線時被刪除。
筆者日前所在的專案中使用了本地臨時表,筆者對此做了些探索。由於業務需要,使用者需要非常複雜報表,需要從多個基礎表中用非常複雜的邏輯選取出資料,使用單一的sql邏輯不清晰,會給日後的維護工作帶來困難,因此決定使用sql server提供的本地臨時表。
採用了以下方式:使用dlephi+ado 直接連線資料庫,呼叫儲存過程,在儲存過程中建立臨時表,然後按使用者要求的邏輯抓取基礎資料寫入到臨時表中,最後返回臨時表中的資料集。
程式寫完後,功能都可以實現,並且結果也沒有錯誤,但是筆者產生了懷疑,聯機叢書中說本地臨時表對當前的使用者連線是可見的,但是,筆者的程式是公用乙個ado連線,然後再呼叫儲存過程,在儲存過程中建立了臨時表,這樣說來,這個臨時表是不是在這個連線中全部可見呢?那第二次開啟同一報表,呼叫同一儲存過程的時候是不是會出錯,或者第二次寫入的資料與第一次寫入的資料混雜在一起呢?於是,筆者開始了實驗,在程式中反覆呼叫同一儲存過程,結果發現並沒有問題,既沒有報錯也沒有出現資料混雜的情況,筆者開始疑惑了,難道是聯機叢書寫錯了?然後筆者開始猜想,難得在同一連線中如果反覆建立同名的臨時表,系統會自動重建,於是筆者又做了試驗,在查詢分析器中,反覆建立同名的本地臨時表,發現系統會報錯,從而否定了筆者的猜想。接著,筆者又進行了試驗,在delphi程式中,在乙個按鈕事件中使用create table語句,建立了本地臨時表,在另乙個按鈕事件中呼叫乙個儲存過程,向這個本地臨時表插入資料,再返回資料集,結果發現能夠成功,而同時在查詢分析器中呼叫這個儲存過程就會報沒有這個資料表,這就證明了聯機叢書的描述是對的,確實是當前連線的使用者可見。而後,修改了試驗程式,將create table的語句寫入到儲存過程中,在前台程式的乙個按鈕事件中先呼叫該儲存過程建立臨時表,然後在另乙個按鈕事件中向這個臨時表插入資料並查詢,結果在執行第二個按鈕事件時系統報錯了,說找不到這個資料表,這樣看來,儲存過程中建立的本地臨時表在前台程式中是訪問不到的。
從這些試驗中,筆者得出這樣的結論,在儲存過程中建立的本地臨時表,相當於儲存過程的變數,只在儲存過程內可見,而在前台程式中建立的本地臨時表,就和微軟聯機叢書中所寫的一樣,是對當前的使用者連線可見。了解了這些,可以在不同場合不同需求下使用不同的方法來建立本地臨時表,這樣,會使臨時表發揮它最大的用處。
以上在實際中的點滴經驗,和各位分享,希望能為各位的工作學習提供一點點幫助,另外,不對之處懇請大家指正
SQL SERVER本地臨時表的可見範圍小探
sql server的臨時表有本地臨時表和全域性臨時表之分,在聯機叢書中這樣描述 有本地和全域性兩種型別的臨時表,二者在名稱 可見性和可用性上均不相同。本地臨時表的名稱以單個數字符號 打頭 它們僅對當前的使用者連線是可見的 當使用者從 microsoft sql server 2000 例項斷開連線...
sessionstorage 本地臨時儲存的理解
html5 web儲存有兩個重要物件 一般涉及到瀏覽器內狀態儲存時,首先會想到cookie。這時如果明白sessionstorage,很快也就會清楚這個功能怎麼實現的 查詢sessionstorage是否有關閉廣告標記sessionstorage.setitem key value 根據標記隱藏或者...
36 臨時表和臨時表
臨時表特點 建表語法是create temporary table乙個臨時表只能被建立它的session訪問,對其他執行緒不可見。臨時表和普通表可以同名。同乙個session內有臨時表和普通表的時候,show crete語句 增刪改查訪問的是臨時表。show tabls命令不顯示臨時表。由於臨時表只...