数据库技术之存储过程.doc
文本预览下载声明
SQLSERVER 存储过程 语法?收藏
SQLSERVER存儲過程的寫法格式規格
********************************************************?author:Susan***?date:2005/08/05***?expliation:如何寫存儲過程的格式及例子,有游標的用法!***?本版:SQL?SERVER?版!******************************************************/在存儲過程中的格式規格:CREATE?PROCEDURE?XXX/*列舉傳入參數1:名稱,2:類型,包括長度Eg:@strUNIT_CODE?varCHAR(3)*/參數1,參數2……………As/*定義內部參數1:名稱,2:類型,包括長度Eg:@strUNIT_CODE?varCHAR(3)*/Declare參數1,參數2……………/*初始化內部參數Eg:SET?@strUNIT_CODE=’’*/Set參數1的初始值Set參數2的初始值…………/*過程的主內容區Trascation:這裡起到的作用是,如果他中間的任何一個執行錯誤,就全部執行都返回,這裡sql?sever?7.0以前一定要寫入,以後的就可以省略Return:結束這支sp*/Begin?trascation????/*????????1:可以取得需要的值以存在內部參數中?????Eg:SELECT?@strUNIT_CODE=UNIT_CODE?FROM?UNIT?WHERE?…….2:可以用取到的或傳入的參數進行判斷,來進行update,insert,delete?等等操作eg:?IF?@strUNIT_CODE=’’?????????BEGIN?????//具體的操作EndElseBegin????//具體的操作End?3:有關游標的問題?????Eg:????????declare?db?cursor?for???????//聲明一個游標(db為其名稱)????????SELECT?UNIT_NAME?FROM?UNIT?WHERE?LEFT(UNIT_CODE,2)=LEFT(@strTO,2)//記錄集????????open?db?????????????????//打開游標????????????fetch?next?from?db?into?@strUNIT_NAME?//將第一個值放入一個參數中????????while?@@fetch_status?=?0?---存在本筆值向下循環(0:順利執行;-1:失敗,或資料列超出結果集;-2:擷取的資料列已遺漏)????????BEGIN?????????????----開始循環????????????????????????//個體操作????????End????????????????----結束循環????????Close?db????????????---關閉游標deallocate?db?????????//移除資料指標參考*/Commit?trascationReturn?下面是一個例子CREATE?PROCEDURE?TEST_2@strTO?VARCHAR(3)ASDECLARE?@strUNIT_NAME?VARCHAR(800),?@strSQL?VARCHAR(8000),?@Link?VARCHAR(1),?@Link1?VARCHAR(1)?SET?@strUNIT_NAME=SET?@strSQL=SET?@Link=SET?@Link1=?/*處理update?的部分EXEC?TEST_2?011EXEC?TEST_2?SELECT?UNIT_NAME?FROM?UNIT?WHERE?UNIT_CODE=011*/BEGIN?TRANSACTION????????????????????????????????????????????????IF?@strTO????????BEGIN????????????????UPDATE?UNIT?SET?UNIT_NAME=REPLACE(UNIT_NAME,*,)?WHERE?UNIT_CODE=@strTO????????END?????????????ELSE????????BEGIN
显示全部