存储过程 分为系统存储过程 和用户自定义村粗过程。
系统存储过程只能调用不能自己定义。
存储过程的好处: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 NetBarDB
go
--判断储存过程是否存在 如果存在 就删除
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 GetBalance
end
go
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
GO
IF EXISTS(SELECT * FROM sys.sysobjects WHERE [NAME]='add_PC')
BEGIN
DROP PROC add_PC
END
GO
--创建存储过程
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