執行與修改儲存過程
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_name | clasification_name | unit_price | |
1 | IBM 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_name | sex | address | department_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_name | sex | address | department_name | |
1 | 錢大理 | 男 | 東風路29號 | 銷售部 |
2 | 郭文斌 | 男 | 五一北路25號 | 市場部 |
這是由於在ALTER PROCEDURE 語句中使用WITH ENCRYPTION 關鍵字對儲存過程employee_dep文字進行了加密,其文字資訊顯示為NULL。
也可以使用系統儲存過程sp_helptext顯示儲存過程的定義(儲存在syscomments系統表內),其命令如下:sp_helptext employee_dep
結果為“物件‘employee_dep’的文字已加密“。
id | text | |
1 | 837578022 | NULL |