SQL Server數據庫中的存儲進程引見。本站提示廣大學習愛好者:(SQL Server數據庫中的存儲進程引見)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server數據庫中的存儲進程引見正文
甚麼是存儲進程
假如你接觸過其他的編程說話,那末就好懂得了,存儲進程就像是辦法一樣。
居然他是辦法那末他就有相似的辦法名,辦法要傳遞的變量和前往成果,所以存儲進程有存儲進程名有存儲進程參數也有前往值。
存儲進程的長處:
存儲進程的才能年夜年夜加強了SQL說話的功效和靈巧性。
1.可包管數據的平安性和完全性。
2.經由過程存儲進程可使沒有權限的用戶在掌握之下直接地存取數據庫,從而包管數據的平安。
3.經由過程存儲進程可使相干的舉措在一路產生,從而可以保護數據庫的完全性。
4.在運轉存儲進程前,數據庫已對其停止了語法和句法剖析,並給出了優化履行計劃。這類曾經編譯好的進程5.可極年夜地改良SQL語句的機能。
6.可以下降收集的通訊量。
7.使表現企業規矩的運算法式放入數據庫辦事器中,以便 集中掌握。
存儲進程可以分為體系存儲進程、擴大存儲進程和用戶自界說的存儲進程
體系存儲進程
我們先來看一下體系存儲進程,體系存儲進程由體系界說,重要寄存在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 --分別數據庫
存儲進程語法:
在創立一個存儲進程前,先來講一下存儲進程的定名,看到好幾篇講存儲進程的文章都愛好在創立存儲進程的時刻加一個前綴,養成在存儲進程名前加前綴的習氣很主要,固然這只是一件很小的工作,然則常常小細節決議年夜成敗。看到有的人愛好如許加前綴,例如proc_名字。也看到這加樣前綴usp_名字。前一種proc是procedure的簡寫,後一種sup意思是user procedure。我比擬愛好第一種,那末上面一切的存儲進程名都以第一種來寫。至於名字的寫法采取駱駝定名法。
創立存儲進程的語法以下:
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語句)
end
declare @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
end
else
begin
return 1
end
end
declare @house varchar(20) --聲明一個變量,獲得存儲進程傳出來的值
exec @house=proc_office_info 2 --(挪用存儲進程,用變量吸收前往值)
--注:帶前往值的存儲進程只能為int類型的前往值
print @house