萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> 數據庫綜合 >> sql server引用對象的方法

sql server引用對象的方法

歡迎大家在這裡學習sql server引用對象!下面是我們給大家整理出來的精彩內容。希望大家在這裡學習!

SQL Server 允許創建的存儲過程引用尚不存在的對象。在創建時,只進行語法檢查。執行時,如果高速緩存中尚無有效的計劃,則編譯存儲過程以生成執行計劃。只有在編譯過程中才解析存儲過程中引用的所有對象。因此,如果語法正確的存儲過程引用了不存在的對象,則仍可以成功創建,但在運行時將失敗,因為所引用的對象不存在。有關更多信息,請參見延遲名稱解析和編譯。

延遲名稱解析和兼容級別

SQL Server 允許 Transact-SQL 存儲過程在創建時引用不存在的表。這種能力稱為延遲名稱解析。不過,如果 Transact-SQL 存儲過程引用了該存儲過程中定義的表,而兼容級別設置(通過執行 sp_dbcmptlevel 來設置)為 65,則在創建時會發出警告信息。而如果在運行時所引用的表不存在,將返回錯誤信息。有關更多信息,請參見 sp_dbcmptlevel 和延遲名稱解析和編譯。

執行存儲過程

成功執行 CREATE PROCEDURE 語句後,過程名稱將存儲在 sysobjects 系統表中,而 CREATE PROCEDURE 語句的文本將存儲在 syscomments 中。第一次執行時,將編譯該過程以確定檢索數據的最佳訪問計劃。

使用 cursor 數據類型的參數

存儲過程只能將 cursor 數據類型用於 OUTPUT 參數。如果為某個參數指定了 cursor 數據類型,也必須指定 VARYING 和 OUTPUT 參數。如果為某個參數指定了 VARYING 關鍵字,則數據類型必須是 cursor,並且必須指定 OUTPUT 關鍵字。

說明 cursor 數據類型不能通過數據庫 API(例如 OLE DB、ODBC、ADO 和 DB-Library)綁定到應用程序變量上。因為必須先綁定 OUTPUT 參數,應用程序才可以執行存儲過程,所以帶有 cursor OUTPUT 參數的存儲過程不能通過數據庫 API 調用。只有將 cursor OUTPUT 變量賦值給 Transact-SQL 局部 cursor 變量時,才可以通過 Transact-SQL 批處理、存儲過程或觸發器調用這些過程。

Cursor 輸出參數

在執行過程時,以下規則適用於 cursor 輸出參數:

對於只進游標,游標的結果集中返回的行只是那些存儲過程執行結束時處於或超出游標位置的行,例如:

在過程中的名為 RS 的 100 行結果集上打開一個非滾動游標。

過程提取結果集 RS 的頭 5 行。

過程返回到其調用者。

返回到調用者的結果集 RS 由 RS 的第 6 到 100 行組成,調用者中的游標處於 RS 的第一行之前。

對於只進游標,如果存儲過程完成後,游標位於第一行的前面,則整個結果集將返回給調用批處理、存儲過程或觸發器。返回時,游標將位於第一行的前面。

對於只進游標,如果存儲過程完成後,游標的位置超出最後一行的結尾,則為調用批處理、存儲過程或觸發器返回空結果集。

說明 空結果集與空值不同。

對於可滾動游標,在存儲過程執行結束時,結果集中的所有行均會返回給調用批處理、存儲過程或觸發器。返回時,游標保留在過程中最後一次執行提取時的位置。

對於任意類型的游標,如果游標關閉,則將空值傳遞回調用批處理、存儲過程或觸發器。如果將游標指派給一個參數,但該游標從未打開過,也會出現這種情況。

說明 關閉狀態只有在返回時才有影響。例如,可以在過程中關閉游標,稍後再打開游標,然後將該游標的結果集返回給調用批處理、存儲過程或觸發器。

臨時存儲過程

SQL Server 支持兩種臨時過程:局部臨時過程和全局臨時過程。局部臨時過程只能由創建該過程的連接使用。全局臨時過程則可由所有連接使用。局部臨時過程在當前會話結束時自動除去。全局臨時過程在使用該過程的最後一個會話結束時除去。通常是在創建該過程的會話結束時。

臨時過程用 # 和 ## 命名,可以由任何用戶創建。創建過程後,局部過程的所有者是唯一可以使用該過程的用戶。執行局部臨時過程的權限不能授予其他用戶。如果創建了全局臨時過程,則所有用戶均可以訪問該過程,權限不能顯式廢除。只有在 tempdb 數據庫中具有顯式 CREATE PROCEDURE 權限的用戶,才可以在該數據庫中顯式創建臨時過程(不使用編號符命名)。可以授予或廢除這些過程中的權限。

說明 頻繁使用臨時存儲過程會在 tempdb 中的系統表上產生爭用,從而對性能產生負面影響。建議使用 sp_executesql 代替。sp_executesql 不在系統表中存儲數據,因此可以避免這一問題。

自動執行存儲過程

SQL Server 啟動時可以自動執行一個或多個存儲過程。這些存儲過程必須由系統管理員創建,並在 sysadmin 固定服務器角色下作為後台過程執行。這些過程不能有任何輸入參數。

對啟動過程的數目沒有限制,但是要注意,每個啟動過程在執行時都會占用一個連接。如果必須在啟動時執行多個過程,但不需要並行執行,則可以指定一個過程作為啟動過程,讓該過程調用其它過程。這樣就只占用一個連接。

在啟動時恢復了最後一個數據庫後,即開始執行存儲過程。若要跳過這些存儲過程的執行,請將啟動參數指定為跟蹤標記 4022。如果以最低配置啟動 SQL Server(使用 -f 標記),則啟動存儲過程也不會執行。有關更多信息,請參見跟蹤標記。

若要創建啟動存儲過程,必須作為 sysadmin 固定服務器角色的成員登錄,並在 master 數據庫中創建存儲過程。

使用 sp_procoption 可以:

將現有存儲過程指定為啟動過程。

停止在 SQL Server 啟動時執行過程。

查看 SQL Server 啟動時執行的所有過程的列表。

存儲過程嵌套

存儲過程可以嵌套,即一個存儲過程可以調用另一個存儲過程。在被調用過程開始執行時,嵌套級將增加,在被調用過程執行結束後,嵌套級將減少。如果超出最大的嵌套級,會使整個調用過程鏈失敗。可用 @@NESTLEVEL 函數返回當前的嵌套級。

若要估計編譯後的存儲過程大小,請使用下列性能監視計數器。

性能監視器對象名 性能監視計數器名稱

SQLServer:緩沖區管理器 高速緩存大小(頁面數)

SQLServer:高速緩存管理器 高速緩存命中率

好了,sql server引用對象內容就給大家介紹到這裡了。希望大家繼續關注我們的網站!

相關推薦:

sql優化工具是什麼 

copyright © 萬盛學電腦網 all rights reserved