zoukankan      html  css  js  c++  java
  • 存储过程

    一般分为十种情况,每种语法各不相同:

     1、 创建语法

    1
    2
    3
    4
    5
    6
    7
    create proc | procedure pro_name
       [{@参数数据类型} [=默认值] [output],
        {@参数数据类型} [=默认值] [output],
        ....
       ]
    as
       SQL_statements

    2、 创建不带参数存储过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    --创建存储过程
    if (exists (select from sys.objects where name 'proc_get_student'))
        drop proc proc_get_student
    go
    create proc proc_get_student
    as
        select from student;
     
    --调用、执行存储过程
    exec proc_get_student;

    3、 修改存储过程

    1
    2
    3
    4
    --修改存储过程
    alter proc proc_get_student
    as
    select from student;

    4、 带参存储过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    --带参存储过程
    if (object_id('proc_find_stu''P'is not null)
        drop proc proc_find_stu
    go
    create proc proc_find_stu(@startId int, @endId int)
    as
        select from student where id between @startId and @endId
    go
     
    exec proc_find_stu 2, 4;

    5、 带通配符参数存储过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --带通配符参数存储过程
    if (object_id('proc_findStudentByName''P'is not null)
        drop proc proc_findStudentByName
    go
    create proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%')
    as
        select from student where name like @name and name like @nextName;
    go
     
    exec proc_findStudentByName;
    exec proc_findStudentByName '%o%''t%';

    6、 带输出参数存储过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if (object_id('proc_getStudentRecord''P'is not null)
        drop proc proc_getStudentRecord
    go
    create proc proc_getStudentRecord(
        @id int--默认输入参数
        @name varchar(20) out--输出参数
        @age varchar(20) output--输入输出参数
    )
    as
        select @name name, @age = age  from student where id = @id and sex = @age;
    go
     
    -- 
    declare @id int,
            @name varchar(20),
            @temp varchar(20);
    set @id = 7; 
    set @temp = 1;
    exec proc_getStudentRecord @id, @name out, @temp output;
    select @name, @temp;
    print @name '#' + @temp;

    7、 不缓存存储过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --WITH RECOMPILE 不缓存
    if (object_id('proc_temp''P'is not null)
        drop proc proc_temp
    go
    create proc proc_temp
    with recompile
    as
        select from student;
    go
     
    exec proc_temp;

    8、 加密存储过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    --加密WITH ENCRYPTION 
    if (object_id('proc_temp_encryption''P'is not null)
        drop proc proc_temp_encryption
    go
    create proc proc_temp_encryption
    with encryption
    as
        select from student;
    go
     
    exec proc_temp_encryption;
    exec sp_helptext 'proc_temp';
    exec sp_helptext 'proc_temp_encryption';

    9、 带游标参数存储过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    if (object_id('proc_cursor''P'is not null)
        drop proc proc_cursor
    go
    create proc proc_cursor
        @cur cursor varying output
    as
        set @cur = cursor forward_only static for
        select id, name, age from student;
        open @cur;
    go
    --调用
    declare @exec_cur cursor;
    declare @id int,
            @name varchar(20),
            @age int;
    exec proc_cursor @cur = @exec_cur output;--调用存储过程
    fetch next from @exec_cur into @id, @name, @age;
    while (@@fetch_status = 0)
    begin
        fetch next from @exec_cur into @id, @name, @age;
        print 'id: ' convert(varchar, @id) + ', name: ' + @name ', age: ' convert(char, @age);
    end
    close @exec_cur;
    deallocate @exec_cur;--删除游标

    10、 分页存储过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    ---存储过程、row_number完成分页
    if (object_id('pro_page''P'is not null)
        drop proc proc_cursor
    go
    create proc pro_page
        @startIndex int,
        @endIndex int
    as
        select count(*) from product
    ;    
        select from (
            select row_number() over(order by pid) as rowId, * from product 
        temp
        where temp.rowId between @startIndex and @endIndex
    go
    --drop proc pro_page
    exec pro_page 1, 4
    --
    --分页存储过程
    if (object_id('pro_page''P'is not null)
        drop proc pro_stu
    go
    create procedure pro_stu(
        @pageIndex int,
        @pageSize int
    )
    as
        declare @startRow int, @endRow int
        set @startRow = (@pageIndex - 1) * @pageSize +1
        set @endRow = @startRow + @pageSize -1
        select from (
            select *, row_number() over (order by id ascas number from student 
        ) t
        where t.number between @startRow and @endRow;
     
    exec pro_stu 2, 2;
  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/qq895139140/p/9044611.html
Copyright © 2011-2022 走看看