資料庫綜合系列之儲存過程

2021-12-30 00:11:55 字數 2675 閱讀 3420

儲存過程如同一門程式語言,同樣包含了資料型別、流程控制、輸入和輸出和它自己的函式庫。

儲存過程作用:

(1) 儲存過程通過引數傳遞,安全性高,可防止注入式攻擊.

(2) 查詢的語句在儲存過程裡,與程式不相關,如果以後要修改程式或者資料庫,都不會出現連鎖反應,增加系統可擴充套件性.

(3) **執行查詢的時候,只需要傳遞簡單的引數就可以了,無論是**優化上還是查詢優化上都可以做到高效.

(4) 允許模組化程式設計,即,可以將一組查詢寫在乙個過程裡面,然後在程式裡直接呼叫,而不必每次都寫若干個語句來實現相應功能

具體使用:資料表**

1 儲存過程進行簡單查詢

if exists(select 1 from sysobjects where id=object_id('test') and xtype='p') --判斷儲存過程是否存在

drop proc test;

gocreate proc test

asselect s_name 商店名字,s_address 商店位址,c_name 銷售人員 from t_shop,t_cash_housewoker where s_id in(select s_id from manage where m_id=1) and t_cash_housewoker.m_id=1

執行:exec test對上面幾個詞彙解釋 sysobjects object_id:

1、sysobjects 系統物件表。 儲存當前資料庫的物件,如約束、預設值、日誌、規則、儲存過程等 在sqlserver2005,sqlserver2008版本的資料庫裡,現在已經作為乙個檢視物件,在每乙個資料庫的系統檢視中,都存在乙個sys.sysobjects 檢視物件。 sysobjects 重要字段解釋: sysobjects ( name sysname, --object 名稱 id int, --object id xtype char(2), -- object 型別 type char(2), -- object 型別(與xtype 似乎一模一樣? 有點鬱悶…) uid smallint, -- object 所有者的id ... --其他的字段不常用到。 ) 注:需要解釋的是 xtype 和type 是一模一樣的,他的資料為: c = check 約束 d = 預設值或 default 約束 f = foreign key 約束 fn = 標量函式 if = 內嵌表函式 k = primary key 或 unique 約束 l = 日誌 p = 儲存過程 r = 規則 rf = 複製篩選儲存過程 s = 系統表 tf = 表函式 tr = 觸發器 u = 使用者表 v = 檢視 x = 擴充套件儲存過程 af = 聚合函式 (clr) fs = 程式集 (clr) 標量函式 ft = 程式集 (clr) 錶值函式 if = 內聯表函式 it = 內部表 pc = 程式集 (clr) 儲存過程 pk = primary key 約束(type 為 k) sn = 同義詞 sq = 服務佇列 ta = 程式集 (clr) dml 觸發器 tt = 表型別 uq = unique 約束(type 為 k) 該表中包含該資料庫中的所有物件,如有那些表 儲存過程 檢視 等資訊 2 object_id在sysobjects系統表中儲存著資料庫的所有物件,每個物件都有乙個唯一的id號進行標識.object_id就是根據物件名稱返回該物件的id.2 帶引數儲存if (object_id('test', 'p') is not null)

drop proc test

gocreate proc test(@id int)

as select s_name 商店名字,s_address 商店位址,c_name 銷售人員 from t_shop,t_cash_housewoker where s_id in(select s_id from manage where m_id=@id) and t_cash_housewoker.m_id=@id

go執行:exec test 1;

3 帶萬用字元的儲存if (object_id('test', 'p') is not null)

drop proc test

gocreate proc test(@name varchar(20) = '%j%', @nextname varchar(20) = '%')

as select * from manage where m_name like @name or m_name like @nextname;

go執行:exec test;

exec test '%步%', '%u%';

4 帶輸出引數的儲存過程if (object_id('test', 'p') is not null)

drop proc test

gocreate proc test(

@id int, --預設輸入引數

@name varchar(20) out, --輸出引數

@age varchar(20) output--輸入輸出引數)as

select @name=m_name,@age=m_bir from manage where m_id=@id

執行:declare @id int,

@name varchar(20),

@bir varchar(20);

set @id = 1;

exec test @id, @name out, @bir output;

select @name, @bir;

print @name + '#' + @bir;

資料庫之儲存過程

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

資料庫之儲存過程

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

資料庫之儲存過程

儲存過程 stored procedure 是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,它儲存在資料庫中,一次編譯後永久有效,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。1.儲存過程的能力大大增強了sql語言的功能和靈活性。2.可保證資料的安全性和完整性...