1. 程式人生 > >執行與修改儲存過程

執行與修改儲存過程

1.執行儲存過程 

 要執行某個儲存過程,只要簡單地通過名字就可以引用它。如果對儲存過程的呼叫不是批處理中的第一條語句,則需要使用EXECUTE關鍵字。下面是執行儲存過程的語法格式。

[[EXEC[UTE]]]

   {[@return_status=]

   procedure_name[;number]|@procedure_name_var}

[[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]]

[,...n]

[WITH RECOMPILE]

各選項的含義如下:

(1)@return_status:一個可選的整型變數,儲存儲存過程的返回狀態。這個變數在EXECUTE語句使用前,必須已宣告。

(2)@procedure_name_var:一個區域性變數名,用來代表儲存過程的名稱。

(3)@patameter:過程引數,在CREATE PROCEDURE語句中定義。

(4)value:過程中引數的值。如果引數名稱沒有指定,引數值必須以CREATE PROCEDURE語句中定義的順序給出。

其他資料和保留字的含義與CREATE PROCEDURE中價紹的一樣。

例如,執行上例的儲存過程goods_info。在SQL查詢分析其中輸入如下命令。EXEC goods_info

執行結果如下圖所示:

儲存過程的執行結果
goods_nameclasification_nameunit_price
1IBM R51筆記本計算機9999.00
2旭日160-D1.7G筆記本計算機9499.00

2.修改儲存過程

修改儲存過程可以通過SQL Server管理平臺和Transact-SQL語句實現。

1)使用SQL Server管理平臺修改儲存過程

修改儲存過程的操作步驟如下:

(1)開啟SQL Server管理平臺,展開結點“物件資源管理器”→“資料庫伺服器”→“可程式設計性”→“儲存過程”,選擇要修改的儲存過程,並右擊,在彈出的快捷選單中選擇“修改”命令。

(2)此時在右邊的編譯器視窗中出現儲存過程的原始碼(將CREATE PROCEDURE 改為ALTER PROCEDURE),可以直接進行修改。修改完後單擊工具欄中的“執行”按鈕該儲存過程,從而達到目的。

2)使用ALTER PROCEDUR語句修改儲存過程

修改用CREATE PROCEDURE語句建立的儲存過程,並且不改變許可權的授予情況,不影響任何其他獨立的儲存過程或觸發器,常使用ALTER PROCEDURE 語句。其語法規則如下:

ALTER PROC[EDURE] procedure_name[,number]

[{@parameter data_type}

[VARYING][=default][OUTPUT]][,...n]

[WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]

[FOR REPLICATION]

AS sql_statement[,...n]

其中的引數和保留字的含義與CREATE PROCEDURE語句中的相似。

舉例:使用ALTER PROCEDURE 語句更改儲存過程。

①建立儲存過程employee_dep,以獲取總經理辦的男員工。

CREATE PROCEDURE employee_dep AS 

SELECT employee_name,sex,address,department_name 

FROM employee e INNER JOIN department d

ON e.department_id=d.department_id

WHERE sex='男'AND  e.department_id='D001'

GO

執行儲存過程employee_dep,結果如下

執行結果
employee_namesexaddressdepartment_name
1錢大理東風路79號銷售部
2東方牧五一北路24號銷售部

②用SELECT語句查詢系統表sysobjects和syscomments,檢視employee-dep儲存過程的文字資訊的程式碼如下:

SELECT o.id,c.text 

FROM sysobjects o INNER JOIN syscomments c ON o.id=c.id

WHERE o.type='P' AND o.name='employee_dep'

GO 

③使用ALTER PROCEDURE 語句對employee_dep過程進行修改,使其能夠顯示出所有男員工,並使employee_dep過程以加密方式儲存在表syscomments中,其程式碼如下:

ALTER PROCEDURE employee_dep

WITH ENCRYPTION

SELECT employee_name,sex,address,department_name

FROM employee e INNER JOIN department d

ON e.department_id=d.department_id

WHERE sex='男'

GO

執行修改後的儲存過程employee_dep,結果如下表所示。

修改後employee_dep儲存過程的執行結果
employee_namesexaddressdepartment_name
1錢大理東風路29號銷售部
2郭文斌五一北路25號市場部

這是由於在ALTER PROCEDURE 語句中使用WITH ENCRYPTION 關鍵字對儲存過程employee_dep文字進行了加密,其文字資訊顯示為NULL。

也可以使用系統儲存過程sp_helptext顯示儲存過程的定義(儲存在syscomments系統表內),其命令如下:sp_helptext employee_dep

結果為“物件‘employee_dep’的文字已加密“。

加密後儲存過程的執行結果
idtext
1837578022NULL