存储过程 分为系统存储过程 和用户自定义村粗过程。
系统存储过程只能调用不能自己定义。
存储过程的好处:1.提高安全性 2.减少网络流量 3.模块化编程 4,执行速度快
---------------常用的系统存储过程---------
----------------系统存储过程-----------------------
--查询指定表的列的信息exec sp_columns 'CardInfo' --查询某个表的所有的信息exec sp_help 'cardInfo'--查询所有的的数据库exec sp_databases--查询某个表的约束exec sp_helpconstraint 'cardInfo'--列举指定数据库或所有的数据库信息 如果没有指定数据库的话 值所有的数据库-- 否则是对应的数据库的所有信息exec sp_helpdb 'NetBarDB'exec sp_helpdb --显示数据库对象(存储过程、触发器视图)的定义文本--exec sp_helptext '对象的名称'--查询指定表的索引信息exec sp_helpindex 'cardInfo'--dos 命令 xp_cmdhell----------------------自定义存储过程----------------------------------------
无返回值的 存储过程的语法
crate procedure 存储过程的名[参数]
as sql 语句 go --输入带参数的存储过程/*create procedure 存储过程的名@参数1名 数据类型[= 默认值]、@参数n名 数据类型[= 默认值]as sql语句、、go*/use NetBarDBgo--判断储存过程是否存在 如果存在 就删除if exists (select 1 from sys.sysobjects where [name]='proc_1') drop procedure proc_1 go create procedure proc_1 @PCUse int --输入参数 as select PCId as '电脑编号', '使用状态'=case when @PCUse =1then '使用' when @PCUse =0 then'空闲' end, PCNote as '备注' from PCInfo go exec proc_1 0------类型转换--- --declare @a int--set @a =22-- declare @q char =convert(char ,@a)--print @q --创建带输出参数的存储过程use NetBarDB go--判断储存过程是否存在if exists (select 1 from sys.sysobjects where [name]='GetBalance')begin drop procedure GetBalanceendgo create procedure GetBalance @cardId int, --卡号 @balance int output--使用output关键字 as --为输出参数赋值 select @balance = CardBalance from CardInfo where cardId=@cardId go --调用储存 declare @balance int --定义变量用于存放储存过程返回的结果 --查询卡号的余额 输出参数在调用时也使用uotput 关键字 exec GetBalance 4,@balance output if (@balance >0) print '余额为 '+convert(varchar(5),@balance)+' 此卡可用'else print '余额为 '+convert(varchar(5),@balance)+' 此卡不可用' --------------RETURN 的使用 ------------------------------reture 的执行终止 存储过程的执行或返回数据USE NetBarDB GOIF EXISTS(SELECT * FROM sys.sysobjects WHERE [NAME]='add_PC')BEGIN DROP PROC add_PCENDGO--创建存储过程CREATE PROC add_PC @PCNoder varchar(20) AS --插入数据 insert into PCInfo VALUES(0,@PCNoder) return @@identity GO--调用存储过程DECLARE @pcid int--声明变量 用于保存存储过程的返回值exec @pcid =add_PC --新添加的电脑---------------错误信息的处理---------------RAISERROR 返回 用户定义错误信息--语法 raiserror (定义错误信息 ,错误的级别,错误的状态)--在存储过程发生错误是 @@ERROR 的值大于零 否则正常执行----------resierror 错误信息的处理-------------------------------USE NetBarDB GO --IF EXISTS (SELECT * FROM sys.sysobjects WHERE [name] ='PROC_ADDBALANCE')-- DROP PROC PROC_ADDBALANCE--GO--CREATE PROC PROC_ADDBALANCE-- @CARDNUMBER VARCHAR(20),-- @MONEY INT --AS-- IF NOT EXISTS (SELECT 1 FROM cardInfo WHERE CardNumber= @CARDNUMBER )-- BEGIN-- DECLARE @MSG VARCHAR(100)--用于存放错误的提示信息-- set @MSG ='充值失败,卡号:'+convert(varchar(20),@MSG)-- RAISERROR(@MSG,16,1)-- RETURN;-- END -- --判断充值的我金额是否大于0-- IF(@MONEY <=0)-- BEGIN-- RAISERROR('充值失败 金额必须大于0元',16,1)-- RETURN;-- END-- --进行充值,修改余额-- UPDATE cardInfo SET CardBalance=CardBalance + @MONEY WHERE CardNumber=@CARDNUMBER -- ---- IF(@@ERROR>0)-- BEGIN-- RAISERROR('修改余额失败',16,1);--输出错误信息-- END -- ELSE-- SELECT '充值成功 卡号'+CONVERT (VARCHAR(20),@CARDNUMBER)+'充值'+CONVERT(VARCHAR(5),@MONEY)+'元'AS '充值的钱'--GO