SQL存儲過(guò)程入門(mén)級教程 |
| |
| |
臨時(shí)存儲過(guò)程 SQL Server 支持兩種臨時(shí)過(guò)程:局部臨時(shí)過(guò)程和全局臨時(shí)過(guò)程。局部臨時(shí)過(guò)程只能由創(chuàng )建該過(guò)程的連接使用。全局臨時(shí)過(guò)程則可由所有連接使用。局部臨時(shí)過(guò)程在當前會(huì )話(huà)結束 時(shí)自動(dòng)除去。全局臨時(shí)過(guò)程在使用該過(guò)程的最后一個(gè)會(huì )話(huà)結束時(shí)除去。通常是在創(chuàng )建該過(guò)程的會(huì )話(huà)結束時(shí)。 臨時(shí)過(guò)程用 # 和 ## 命名,可以由任何用戶(hù)創(chuàng )建。創(chuàng )建過(guò)程后,局部過(guò)程的所有者是唯一可以使用該過(guò)程的用戶(hù)。執行局部臨時(shí)過(guò)程的權限不能授予其他用戶(hù)。如果創(chuàng )建了全局臨時(shí)過(guò) 程,則所有用戶(hù)均可以訪(fǎng)問(wèn)該過(guò)程,權限不能顯式廢除。只有在 tempdb 數據庫中具有顯式 CREATE PROCEDURE 權限的用戶(hù),才可以在該數據庫中顯式創(chuàng )建臨時(shí)過(guò)程(不使用編號符命名)??梢允谟杌驈U除這些過(guò)程中的權限。 說(shuō)明 頻繁使用臨時(shí)存儲過(guò)程會(huì )在 tempdb 中的系統表上產(chǎn)生爭用,從而對性能產(chǎn)生負面影響。建議使用 sp_executesql 代替。sp_executesql 不在系統表中存儲數據,因此可以避免這一問(wèn)題。 自動(dòng)執行存儲過(guò)程 SQL Server 啟動(dòng)時(shí)可以自動(dòng)執行一個(gè)或多個(gè)存儲過(guò)程。這些存儲過(guò)程必須由系統管理員創(chuàng )建,并在 sysadmin 固定服務(wù)器角色下作為后臺過(guò)程執行。這些過(guò)程不能有任何輸入參數。 對啟動(dòng)過(guò)程的數目沒(méi)有限制,但是要注意,每個(gè)啟動(dòng)過(guò)程在執行時(shí)都會(huì )占用一個(gè)連接。如果必須在啟動(dòng)時(shí)執行多個(gè)過(guò)程,但不需要并行執行,則可以指定一個(gè)過(guò)程作為啟動(dòng)過(guò)程,讓該過(guò)程調用其它過(guò)程。這樣就只占用一個(gè)連接。 在啟動(dòng)時(shí)恢復了最后一個(gè)數據庫后,即開(kāi)始執行存儲過(guò)程。若要跳過(guò)這些存儲過(guò)程的執行,請將啟動(dòng)參數指定為跟蹤標記 4022。如果以最低配置啟動(dòng) SQL Server(使用 -f 標記),則啟動(dòng)存儲過(guò)程也不會(huì )執行。 若要創(chuàng )建啟動(dòng)存儲過(guò)程,必須作為 sysadmin 固定服務(wù)器角色的成員登錄,并在 master 數據庫中創(chuàng )建存儲過(guò)程。 使用 sp_procoption 可以: 將現有存儲過(guò)程指定為啟動(dòng)過(guò)程。 停止在 SQL Server 啟動(dòng)時(shí)執行過(guò)程。 查看 SQL Server 啟動(dòng)時(shí)執行的所有過(guò)程的列表。 存儲過(guò)程嵌套 存儲過(guò)程可以嵌套,即一個(gè)存儲過(guò)程可以調用另一個(gè)存儲過(guò)程。在被調用過(guò)程開(kāi)始執行時(shí),嵌套級將增加,在被調用過(guò)程執行結束后,嵌套級將減少。如果超出最大的嵌套級,會(huì )使整個(gè)調用過(guò)程鏈失敗??捎?nbsp;@@NESTLEVEL 函數返回當前的嵌套級。 若要估計編譯后的存儲過(guò)程大小,請使用下列性能監視計數器。 * 各種分類(lèi)的高速緩存對象均可以使用這些計數器,包括特殊 sql、準備 sql、過(guò)程、觸發(fā)器等。 sql_statement 限制 除了 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL 之外(這兩個(gè)語(yǔ)句必須是批處理中僅有的語(yǔ)句),任何 SET 語(yǔ)句均可以在存儲過(guò)程內部指定。所選擇的 SET 選項在存儲過(guò)程執行過(guò)程中有效,之后恢復為原來(lái)的設置。 |
聯(lián)系客服