資料庫之儲存過程

2021-09-23 13:27:09 字數 2705 閱讀 4290

儲存過程(stored procedure)是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,它儲存在資料庫中,一次編譯後永久有效,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。

1.儲存過程的能力大大增強了sql語言的功能和靈活性。

2.可保證資料的安全性和完整性。

3.建立時已經檢查了語法;第一次執行的時候執行計畫被建立,被編譯,再次執行時不需要重檢查語法、不需要重編譯、根據已經快取的計畫來決定是否需要重建立執行計畫

4.減少網路流量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量。

5.重複使用。儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量。

儲存過程可以分為系統儲存過程、擴充套件儲存過程和使用者自定義的儲存過程

我們先來看一下系統儲存過程,系統儲存過程由系統定義,主要存放在master資料庫中,名稱以"sp"開頭或以"xp"開頭。儘管這些系統儲存過程在master資料庫中,

但我們在其他資料庫還是可以呼叫系統儲存過程。有一些系統儲存過程會在建立新的資料庫的時候被自動建立在當前資料庫中。

常用系統儲存過程有:

exec sp_databases; --檢視資料庫

exec sp_tables; --檢視表

exec sp_columns student;--檢視列

exec sp_helpindex student;--檢視索引

exec sp_helpconstraint student;--約束

exec sp_helptext 'sp_stored_procedures';--檢視儲存過程建立定義的語句

exec sp_stored_procedures;

exec sp_rename student, stuinfo;--更改表名

exec sp_renamedb mytempdb, mydb;--更改資料庫名稱

exec sp_defaultdb 'master', 'mydb';--更改登入名的預設資料庫

exec sp_helpdb;--資料庫幫助,查詢資料庫資訊

exec sp_helpdb master;

exec sp_attach_db --附加資料庫

exec sp_detach_db --分離資料庫

儲存過程語法

create proc[edure] 儲存過程名 

@引數1 [資料型別]=[預設值] [output]

@引數2 [資料型別]=[預設值] [output]

as sql語句

exec 過程名[引數]

1.不帶引數

create procedure proc_select_officeinfo--(儲存過程名)

as select id,name from office_info--(sql語句)

exec proc_select_officeinfo--(呼叫儲存過程)

2.帶輸入引數

create procedure procedure_proc_getoffinfobyid --(儲存過程名)

@id int--(引數名 引數型別)

as select name from dbo.office_info where id=@id--(sql語句)

exec procedure_proc_getoffinfobyid 2--(儲存過程名稱之後,空格加上引數,多個引數中間以逗號分隔)

注:引數賦值是,第乙個引數可以不寫引數名稱,後面傳入引數,需要明確傳入的是哪個引數名稱

3.帶輸入輸出引數

create procedure proc_office_info--(儲存過程名)

@id int,@name varchar(20) output--(引數名 引數型別)傳出引數要加上output

as begin

select @name=name from dbo.office_info where id=@id --(sql語句)

enddeclare @housename varchar(20) --宣告乙個變數,獲取儲存過程傳出來的值

exec proc_office_info--(儲存過程名)

4,@housename output--(傳說引數要加output 這邊如果用@變數 = output會報錯,所以換一種寫法)

select @housename--(顯示值)

4.帶返回值的

create procedure proc_office_info--(儲存過程名)

@id int--(引數名 引數型別)

as begin

if(select name from dbo.office_info where id=@id)=null --(sql語句)

begin

return -1

endelse

begin

return 1

endend

declare @house varchar(20) --宣告乙個變數,獲取儲存過程傳出來的值

exec @house=proc_office_info 2 --(呼叫儲存過程,用變數接收返回值)

--注:帶返回值的儲存過程只能為int型別的返回值

print @house

資料庫之儲存過程

資料庫物件包括 表 索引 規圖 儲存過秳 觸發器 儲存過秳是資料庫重要的物件。是一組為了完成特定功能的sql詢句集。作用是 1.儲存過秳是在創造進行編譯的。之後每次執行儲存過程不需要重新編譯,而一般sql詢句需要每執行一次就編譯一次。2.當對資料庫迕行複雜操作時 如對多個表進行update,inse...

資料庫之儲存過程

最近筆試面試,多次被問到,雖然筆者不怎麼用,但是了解一下也是好的。資料庫儲存過程是一組預先建立並用指定的名稱儲存在資料庫伺服器上的 sql 語句,將使用比較頻繁或者比較複雜的操作,預先用 sql 語句寫好並用乙個指定的名稱儲存起來,以後當需要資料庫提供與已定義好的儲存過程的功能相同的服務時,只需再次...

資料庫之儲存過程

什麼是儲存過程?使用儲存過程的優缺點?儲存過程 stored procedure 是一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫 經過第一次編譯後再次呼叫不需要再次編譯 注意 使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。儲存過程是資料庫中的乙個重要物件,任...