創建完畢了兩個存儲過程。它們在同一個組S1裡,如果執行Exec S1 則存儲過程默認執行 Exec S1 ;1 。如果我們想得到所有據點信息則需要執行Exec S1 ;2。當我們要刪除存儲過程的時候,只能執行Drop Exec S1 則該組內所有的存儲過程被刪除。
[@ parameter]: 存儲過程中的參數,除非將參數定義的時候有默認值或者將參數設置為等於另一個參數,否則用戶必須在調用存儲過程的時候為參數賦值。
存儲過程最多有2100個參數。
例如:
Create Proc yangyang8848.OneGoods
@GoodsCode varchar(10)
As
Select * From Master_Goods Where GoodsCode = @GoodsCode
Go
調用的代碼:
Declare @Code varchar(10)
Set @Code = '0004'
Exec yangyang8848.OneGoods @Code
在參數的後邊加入Output 表明該參數為輸出參數。
Create Proc yangyang8848.OneGoods
@GoodsCode2 varchar(10) output,@GoodsCode varchar(10) = '0011'
As
Select * From Master_Goods Where GoodsCode = @GoodsCode
Set @GoodsCode2 = '0005'
Go
調用方法:
Declare @VV2 varchar(10)
Exec yangyang8848.OneGoods @Code out
注意:如果存儲過程的兩個參數一個有默認值一個沒有,那麼我們要把有默認值得放在後邊,不然會出問題哦~~
細心的朋友,可能看到上邊的語句有一些不同,比如,存儲過程用的是output,而調用語句用的是out。我要告訴您,兩者是一樣的。
[RECOMPILE]:指示數據庫引擎 不緩存該過程的計劃,該過程在運行時編譯。如果指定了 FOR REPLICATION,則不能使用此選項。對於 CLR 存儲過程,不能指定 RECOMPILE。
這個說一個非常好用的函數 OBJECT_ID :返回架構范圍內對象的數據庫對象標識號。
例如:我們創建存儲過程時,可以如下寫代碼
If Object_ID('yangyang8848.OneGoods') Is Not Null
Drop Proc yangyang8848.OneGoods
Go
Create Proc yangyang8848.OneGoods
@GoodsCode2 varchar(10) out,@GoodsCode varchar(10) = '0011'
As
Select * From Master_Goods Where GoodsCode = @GoodsCode
Set @GoodsCode2 = '0005'
Go
針對於上邊的這個存儲過程,我們調用以下SQL查詢
Select definition From sys.sql_modules
Where object_id = Object_ID('yangyang8848.OneGoods');
我們是可以查到結果的。