SQL Server預存程序Return、output參數及提示
來源:互聯網
上載者:User
SQL Server目前正日益成為WindowNT作業系統上面最為重要的一種資料庫管理系統,隨著 SQL Server2000的推出,微軟的這種資料庫服務系統真正地實現了在WindowsNT/2000系列作業系統一統天下的局面,在微軟的作業系統上,沒有任何一種資料庫系統能與之抗衡,包括資料庫領域中的領頭羊甲骨文公司的看家資料庫Oracle在內。不可否認,SQL Server最大的缺陷就是只能運行在微軟自己的作業系統上,這一點是SQL Server的致命點。但在另一方面卻也成了最好的促進劑,促使SQL Server在自己僅有的“土地”上面將自己的功能發揮到了極至最大限度的利用了NT系列作業系統的各種潛能!作為SQL Server資料庫系統中很重要的一個概念就是預存程序,合理的使用預存程序,可以有效提高程式的效能;並且將商業邏輯封裝在資料庫系統中的預存程序中,可以大大提高整個軟體系統的可維護性,當你的商業邏輯發生改變的時候,不再需要修改並編譯用戶端應用程式以及重新分發他們到為數眾多的使用者手中,你只需要修改位於伺服器端的實現相應商業邏輯的預存程序即可。合理的編寫自己需要的預存程序,可以最大限度的利用SQL Server的各種資源。下面我們來看看各種編寫SQL Server預存程序和使用預存程序的技巧經驗。 Input 此參數只用於將資訊從應用程式傳輸到預存程序。 InputOutput 此參數可將資訊從應用程式傳輸到預存程序,並將資訊從預存程序傳輸回應用程式。 Output 此參數只用於將資訊從預存程序傳輸回應用程式。 ReturnValue 此參數表示預存程序的傳回值。SQL Server 的預存程序參數列表中不顯示該參數。它只與預存程序的 RETURN 語句中的值相關聯。 預存程序為主鍵產生新值後,通常使用預存程序中的 RETURN 語句返回該值,因此用來訪問該值的參數類型是 ReturnValue 參數。 1、不帶輸入參數的簡單預存程序if object_id('up_user') is not nulldrop proc up_usergocreate proc up_userasset nocount ondelcare @name varchar(10)beginselect @name=uname from userendset nocount offgoesec up_user 2、帶輸入參數的簡單預存程序 if object_id('up_user') is not nulldrop proc up_usergocreate proc up_user@id intasset nocount ondelcare @name varchar(10)beginselect @name=uname from user where uid=@idendset nocount offgo--執行該預存程序esec up_user 1 3、帶Return參數的預存程序 if object_id('up_user') is not nulldrop proc up_usergocreate proc up_userasset nocount ondelcare @age intbeginselect @age=uage from userreturn @ageendset nocount offgo --執行該預存程序declare @age intexec @age=up_userselect @age 4、帶output參數的預存程序 if object_id('up_user') is not nulldrop proc up_usergocreate proc up_user@id int,@name varchar(10) ='' outputasset nocount onbeginselect @name=uname from user where uid=@idendset nocount offgo --執行該預存程序declare @name varchar(10)exec up_user 2, @name outputselect @name 5、同時帶Return和output參數的預存程序if exists(select name from sysobjects where name='up_user' and type='p')drop proc up_usergocreate proc up_user@id int,@name varchar(20) outputasdeclare @age intbeginselect @age=stuage,@name=stuname from stuinfo where uid=@idreturn @ageend --執行該預存程序declare @age intdeclare @name varchar(20)exec @age=up_user 2,@name outputselect @age,@name 附:SQL Server 系統全域變數@@CONNECTIONS 返回自上次啟動以來串連或試圖串連的次數。@@CURSOR_ROWS 返回串連上最後開啟的遊標中當前存在的合格行的數量(返回被開啟的遊標中還未被讀取的有效資料行的行數)@@DATEFIRST 返回每周第一天的數字@@ERROR 返回最後執行的SQL 陳述式的錯誤碼。@@FETCH_STATUS 返回被 FETCH 語句執行的最後遊標的狀態,而不是任何當前被串連開啟的遊標的狀態。@@IDENTITY 返回最後插入的標識值@@LANGID 返回當前所使用語言的本地語言識別項(ID)。@@LANGUAGE 返回當前使用的語言名。@@LOCK_TIMEOUT 返回當前會話的當前鎖逾時設定,單位為毫秒。@@PROCID 返回當前過程的預存程序標識符 (ID) 。@@ROWCOUNT 返回受上一語句影響的行數。@@SERVERNAME 返回運行 的本機伺服器名稱。@@SPID 返回目前使用者進程的伺服器處理序標識符 (ID)。@@TRANCOUNT 返回當前串連的活動事務數。@@VERSION 返回當前安裝的日期、版本和處理器類型。@@CPU_BUSY返回自SQL Server 最近一次啟動以來CPU 的工作時間其單位為毫秒@@DATEFIRST返回使用SET DATEFIRST 命令而被賦值的DATAFIRST 參數值SET DATEFIRST,命令用來指定每周的第一天是星期幾@@DBTS返回當前資料庫的時間戳記值必須保證資料庫中時間戳記的值是惟一的@@ERROR返回執行Transact-SQL 陳述式的錯誤碼@@FETCH_STATUS返回上一次FETCH 語句的狀態值@@IDLE返回自SQL Server 最近一次啟動以來CPU 處於空閉狀態的時間長短單位為毫秒@@IO_BUSY返回自SQL Server 最近一次啟動以來CPU 執行輸入輸出操作所花費的時間其單位為毫秒@@LANGID返回當前所使用的語言ID 值@@LANGUAGE返回當前使用的語言名稱@@LOCK_TIMEOUT返回當前會話等待鎖的時間長短其單位為毫秒@@MAX_CONNECTIONS返回允許串連到SQL Server 的最大串連數目@@MAX_PRECISION返回decimal 和numeric 資料類型的精確度@@NESTLEVEL返回當前執行的預存程序的嵌套級數初始值為0@@OPTIONS返回當前SET 選項的資訊@@PACK_RECEIVED返回SQL Server 通過網路讀取的輸入包的數目@@PACK_SENT返回SQL Server 寫給網路的輸出包的數目@@PACKET_ERRORS返回網路包的錯誤數目@@PROCID返回當前預存程序的ID 值@@REMSERVER返回遠程SQL Server 資料庫伺服器的名稱@@SERVICENAME返回SQL Server 正運行於哪種服務狀態之下如MSSQLServer MSDTC SQLServerAgent@@SPID返回目前使用者處理的伺服器處理ID 值@@TEXTSIZE返回SET 語句的TEXTSIZE 選項值SET 語句定義了SELECT 語句中text 或image資料類型的最大長度基本單位為位元組@@TIMETICKS返回每一時鐘的微秒數@@TOTAL_ERRORS返回磁碟讀寫錯誤數目@@TOTAL_READ返回磁碟讀操作的數目@@TOTAL_WRITE返回磁碟寫操作的數目@@TRANCOUNT返回當前串連中處於啟用狀態的事務數目