程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 詳解SQLServer存儲過程(2)

詳解SQLServer存儲過程(2)

編輯:關於SqlServer

     創建完畢了兩個存儲過程。它們在同一個組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');

      我們是可以查到結果的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved