数据库综合系列 之 存储过程
生活随笔
收集整理的這篇文章主要介紹了
数据库综合系列 之 存储过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
存儲過程如同一門程序設計語言,同樣包含了數據類型、流程控制、輸入和輸出和它自己的函數庫。
存儲過程作用:
(1) 存儲過程通過參數傳遞,安全性高,可防止注入式攻擊.?
(2) 查詢的語句在存儲過程里,與程序不相關,如果以后要修改程序或者數據庫,都不會出現連鎖反應,增加系統可擴展性.?
(3) 網站執行查詢的時候,只需要傳遞簡單的參數就可以了,無論是代碼優化上還是查詢優化上都可以做到高效.?
(4) 允許模塊化編程,即,可以將一組查詢寫在一個過程里面,然后在程序里直接調用,而不必每次都寫若干個語句來實現相應功能?
具體使用:數據表來源http://blog.csdn.net/buyingfei8888/article/details/17399837
1 存儲過程進行簡單查詢
?
if exists(select 1 from sysobjects where id=object_id('test') and xtype='P') --判斷存儲過程是否存在 drop proc test; go create proc test 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=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 go create proc test(@Id int) 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=@Id) and t_cash_housewoker.m_id=@Idgo執行: exec test 1;
3 帶通配符的存儲 if (object_id('test', 'P') is not null)drop proc test go create proc test(@name varchar(20) = '%j%', @nextName varchar(20) = '%') asselect * 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 go create proc test(@id int, --默認輸入參數@name varchar(20) out, --輸出參數@age varchar(20) output--輸入輸出參數 ) asselect @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;
?
?
?
轉載于:https://www.cnblogs.com/riasky/p/3481510.html
總結
以上是生活随笔為你收集整理的数据库综合系列 之 存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10系统开机总是蓝屏怎么解决 wi
- 下一篇: vue创建脚手架 cil