日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库综合系列 之 存储过程

發(fā)布時間:2024/10/12 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库综合系列 之 存储过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

存儲過程如同一門程序設(shè)計語言,同樣包含了數(shù)據(jù)類型、流程控制、輸入和輸出和它自己的函數(shù)庫。

存儲過程作用:

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

(2) 查詢的語句在存儲過程里,與程序不相關(guān),如果以后要修改程序或者數(shù)據(jù)庫,都不會出現(xiàn)連鎖反應(yīng),增加系統(tǒng)可擴展性.?

(3) 網(wǎng)站執(zhí)行查詢的時候,只需要傳遞簡單的參數(shù)就可以了,無論是代碼優(yōu)化上還是查詢優(yōu)化上都可以做到高效.?

(4) 允許模塊化編程,即,可以將一組查詢寫在一個過程里面,然后在程序里直接調(diào)用,而不必每次都寫若干個語句來實現(xiàn)相應(yīng)功能?

具體使用:數(shù)據(jù)表來源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


執(zhí)行:

?

?

exec test

?

?

?對上面幾個詞匯解釋 sysobjects ?object_id:

?

1、sysobjects 系統(tǒng)對象表。 保存當前數(shù)據(jù)庫的對象,如約束、默認值、 日志、規(guī)則、 存儲過程等 在sqlserver2005,sqlserver2008版本的數(shù)據(jù)庫里,現(xiàn)在已經(jīng)作為一個視圖對象,在每一個數(shù)據(jù)庫的系統(tǒng)視圖中,都存在一個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 是一模一樣的,他的數(shù)據(jù)為: C = CHECK 約束 D = 默認值或 DEFAULT 約束 F = FOREIGN KEY 約束 FN =? 標量函數(shù) IF = 內(nèi)嵌表函數(shù) K = PRIMARY KEY 或 UNIQUE 約束 L =? 日志 P =? 存儲過程 R = 規(guī)則 RF = 復(fù)制篩選 存儲過程 S = 系統(tǒng)表 TF = 表函數(shù) TR =? 觸發(fā)器 U = 用戶表 V = 視圖 X = 擴展 存儲過程 AF = 聚合函數(shù) (CLR) FS = 程序集 (CLR) 標量函數(shù) FT = 程序集 (CLR) 表值函數(shù) IF = 內(nèi)聯(lián)表函數(shù) IT = 內(nèi)部表 PC = 程序集 (CLR) 存儲過程 PK = PRIMARY KEY 約束(type 為 K) SN = 同義詞 SQ = 服務(wù)隊列 TA = 程序集 (CLR) DML 觸發(fā)器 TT = 表類型 UQ = UNIQUE 約束(type 為 K) 該表中包含該數(shù)據(jù)庫中的所有對象,如有那些表? 存儲過程?視圖 等信息 2?object_id 在sysobjects系統(tǒng)表中存儲著數(shù)據(jù)庫的所有對象,每個對象都有一個唯一的id號進行標識. object_id就是根據(jù)對象名稱返回該對象的id. 2 帶參數(shù)存儲 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
執(zhí)行: 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
執(zhí)行: exec test; exec test '%步%', '%u%';
4 帶輸出參數(shù)的存儲過程 if (object_id('test', 'P') is not null)drop proc test go create proc test(@id int, --默認輸入?yún)?shù)@name varchar(20) out, --輸出參數(shù)@age varchar(20) output--輸入輸出參數(shù) ) asselect @name=m_name,@age=m_bir from manage where m_id=@id
執(zhí)行: 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;

?

?



?

轉(zhuǎn)載于:https://www.cnblogs.com/riasky/p/3481510.html

總結(jié)

以上是生活随笔為你收集整理的数据库综合系列 之 存储过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。