zoukankan      html  css  js  c++  java
  • 数据库综合系列 之 存储过程

    存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。

    存储过程作用:

    (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 约束
    IF = 内嵌表函数
    K = PRIMARY KEY 或 UNIQUE 约束
    L =  日志
    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)
    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=@Id) and t_cash_housewoker.m_id=@Id
    
    go

    执行:
    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) = '%')
    as
        select * 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--输入输出参数
    )
    as
        select @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;




  • 相关阅读:
    python 类的自定义属性
    好的設計模式
    sql server 过滤重复数据
    sql server 2000 sp3
    css
    SQL server 与Oracle开发比较(同事帮忙整理的,放这里方便查询)
    深圳 帮部门招聘人才
    BCP等三個sql server 過程
    CTE and CONNECT BY 樹的查詢(轉)
    继承System.Web.UI.Page的页面基类
  • 原文地址:https://www.cnblogs.com/riasky/p/3481510.html
Copyright © 2011-2022 走看看