码迷,mamicode.com
首页 > 其他好文 > 详细

存储过程的笔记

时间:2015-03-11 23:04:45      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

存储过程 分为系统存储过程 和用户自定义村粗过程。

系统存储过程只能调用不能自己定义。

存储过程的好处: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


 

存储过程的笔记

标签:

原文地址:http://www.cnblogs.com/cl1006/p/4331122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!