開拓自己

          NeverDrop

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            0 隨筆 :: 14 文章 :: 0 評論 :: 0 Trackbacks

          -------------------------------------------------------------存儲過程---------------------------------------------------
          存儲過程創建時就在服務器上編譯了,所以比執行單個sql語句快

          用exec 系統存儲過程名稱就可以調用,常用的有:

          sp_renamedb '原數據庫名','修改后的名'?????????????? ?作用 修改數據庫名稱 在master下用(這個功能比較實用)

          sp_tables??????????????????????????????? --當前數據庫中而已查詢的對象的列表

          sp_helpindex stuMarks? 查看stuMarks表的索引

          Exec xp_cmdshell 'mkdir d:\bank',no_output 創建文件夾

          存儲過程里也可以 調用視圖

          用戶自定義存儲過程,

          1:不帶參數的存儲過程:

          create? exec proc 或者procedure? 存儲過程名 (過程名最好是proc_名稱為好)
          as
          (可以在里面定義一些局部變量)
          sql語句,任何都行
          go

          調用
          Exce 存儲過程名

          2:帶輸入參數的存儲過程:(每個參數 后面要有逗號)
          create proc proc_name
          (參數) @ mark1 int?=60? (=60表示給了一個默認值,沒傳參數進來的時候,就用這個值),
          ????????????@ mark2 int?=60? (=60表示給了一個默認值,沒傳參數進來的時候,就用這個值),
          ????????????@address varchar(20)
          as
          語句
          go

          調用
          1:Exce proc_name? 不傳任何值 表示使用默認的值 (但是@address沒有給默認值所以 編譯后會抱錯)
          ? 沒有給默認值的輸入參數,我們在調用存儲過程的時候要給 值
          ? 改:Exce proc_name @address='武漢'

          2:Exce proc_name 80,@address='武漢'? (只給了一個數字的參數,會默認把參數給第一個上面)

          3:Exce proc_name @mark2=80? @address='武漢'? 這樣才會把參數給到第2個上面
          (要想不傳參數必須所有的參數 在定義的時候都給上默認的值)

          3,帶輸出參數的存儲過程

          創建:
          create proc proc_name
          --(定義參數)
          @ id? int output??,? --關鍵字,聲明為輸出參數,沒有的話就是輸入參數。
          @ hehe int =10?? --輸入參數
          as
          sql 語句 給輸出參數賦值/
          go
          ?
          調用
          1:定義變量:用于接受存儲過程返回的結果
          ? declare @id int
          2: exec proc_name? @id output,60 --調用的時候也得聲明


          --------------------------------------------------------------------錯誤處理--------------------------------------------
          raiserror 拋出錯誤
          例子

          當我們不愿意的變量分數>100時候

          if(@mark>100)
          begin
          //開始拋出異常
          Raiserror('幾個分數不能是大于100的數字',16,1)? 16代表錯誤等幾? 我門最好都寫16,17,18,1表示錯誤狀態,一般存儲過程里都寫1
          return? --立即返回,退出存儲過程

          end



          posted on 2007-01-02 14:50 誠夏徠 閱讀(125) 評論(0)  編輯  收藏 所屬分類: 數據庫
          主站蜘蛛池模板: 万山特区| 绵阳市| 台中市| 神农架林区| 西贡区| 汶川县| 栾川县| 南阳市| 甘泉县| 巢湖市| 兴文县| 麻江县| 铅山县| 太康县| 安陆市| 汕头市| 云和县| 海门市| 克山县| 宁晋县| 河北区| 扶风县| 阆中市| 田林县| 常山县| 平安县| 娄底市| 鄂伦春自治旗| 罗田县| 阿图什市| 略阳县| 永丰县| 礼泉县| 浦江县| 辰溪县| 南充市| 镇安县| 铁岭县| 阳新县| 恩平市| 海丰县|