• 存储过程

    • 是用来执行管理任务或应用复杂的业务规则,
    • 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
  • 存储过程的优点
    • 存储过程已在服务器注册
    • 执行速度更快
    • 允许模块化程序设计
    • 提高系统安全性 减少网络流通量    
  • 系统存储过程
    1.  由系统定义,存放在master数据库中
    2.  系统存储过程的名称都以“sp_”开头或“xp_”开头
  • 常见的系统存储过程

 

exec sp_databases; --查看数据库
exec sp_tables; --查看表
exec sp_columns student;--查看列
exec sp_helpIndex student;--查看索引
exec sp_helpConstraint student;--约束
exec sp_stored_procedures;
exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
exec sp_rename student, stuInfo;--修改表、索引、列的名称
exec sp_renamedb myTempDB, myDB;--更改数据库名称
exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
exec sp_helpdb;--数据库帮助,查询数据库信息
exec sp_helpdb master;
  • 扩充存储过程
    • 可以执行DOS命令下的一些的操作
    • 以文本行方式返回任何输出
    • 调用语法: EXEC xp_cmdshell DOS命令 [NO_OUTPUT]
    • 启动方法:
       EXEC sp_configure 'show advanced options', 1
      GO
      RECONFIGURE
      GO
      EXEC sp_configure 'xp_cmdshell', 1
      GO
      RECONFIGURE
      GO
    • 示例:
      /*创建数据库bankDB,要求保存在D:\bank
      */ USE master
      GO
      EXEC xp_cmdshell 'mkdir d:\bank', NO_OUTPUT
      IF EXISTS(SELECT * FROM sysdatabases
      WHERE name='bankDB')
      DROP DATABASE bankDB
      GO
      CREATE DATABASE bankDB
      (

      )
      GO
      EXEC xp_cmdshell 'dir D:\bank\' --查看文件

   

  • 定义存储过程的语法

    

CREATE PROC[DEURE]  存储过程名
@参数1 数据类型 = 默认值 [OUTPUT],
@参数2 数据类型 = 默认值 [OUTPUT],
...
@参数n 数据类型 = 默认值 [OUTPUT] AS SQL语句 GO
  • 调用存储过程   

    

EXEC  过程名 [参数]
  • 用户自定义存储过程
  1.  创建不带参数存储过程

    --创建存储过程
    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;
  2. 修改存储过程
    --修改存储过程
    alter proc proc_get_student
    as
    select * from student;
  3. 带参存储过程
    --带参存储过程
    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;
  4. 带通配符参数存储过程
    --带通配符参数存储过程
    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%';
  5. 带输出参数存储过程
    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;
  6. 不缓存存储过程
    --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;
  7. 加密存储过程
    --加密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';
  8. 带游标参数存储过程

    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;--删除游标
  9. 分页存储过程

    ---存储过程、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 asc) as number from student
    ) t
    where t.number between @startRow and @endRow; exec pro_stu 2, 2;
  • 删除存储过程

    DROP PROC[EDURE] 过程名

SQL 之存储过程的更多相关文章

  1. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  2. 使用 ODBC .NET 提供程序和 Visual C# .NET 执行 SQL 参数化存储过程

    http://support2.microsoft.com/kb/310130/zh-cn 此分步指导文章描述如何使用 ODBC .NET 托管提供程序和 Visual C# .Net 调用参数化 S ...

  3. SQL Server存储过程Return、output参数及使用技巧

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  4. 11月16日《奥威Power-BI基于SQL的存储过程及自定义SQL脚本制作报表》腾讯课堂开课啦

           上周的课程<奥威Power-BI vs微软Power BI>带同学们全面认识了两个Power-BI的使用情况,同学们已经迫不及待想知道这周的学习内容了吧!这周的课程关键词—— ...

  5. SQL Server 存储过程(转载)

    SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...

  6. 14、SQL Server 存储过程

    SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...

  7. Sql Service存储过程分页

    一起是用oracle数据库..感觉oracle数据库强大.查询速度是杠杠的.换了家公司用的是SQL SERVICE.以前用了1年现在捡回以前的记忆.动手写了动态SQL过存储过程分页.感觉和oracle ...

  8. [转]关于SQL分页存储过程的分析

    [转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...

  9. (摘录)SQL Server 存储过程

    文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...

  10. Sql Server 存储过程中查询数据无法使用 Union(All)

    原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...

随机推荐

  1. C#高级编程第9版 阅读笔记(一)

    一.前言 C# 简洁.类型安全的面向对象的语言. .NET是一种在windows平台上编程的架构——一种API. C#是一种从头开始设计的用于.NET的语言,他可以利用.NET Framework及其 ...

  2. zeroc

    ZeroC ICE 是指ZeroC公司的ICE(Internet Communications Engine)中间件平台.对于客户端和服务端程序的开发提供了很大的便利. 目前ICE平台中包括Ice,I ...

  3. 【转载】基于VoiceOver的移动web站无障碍访问实战

    文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/wordpress/ 原文链接:http://www.zhangxinxu.com/wordpress/?p=5 ...

  4. 张高兴的 Windows 10 IoT 开发笔记:ToF Sensor VL53L0X

    GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/VL53L0X

  5. PyCharm 2017 官网 下载 安装 设置 配置 (主题 字体 字号) 使用 入门 教程

    一.安装 Python 3.6 首先,要安装好 Python 3.6.如果你还没有安装,可以参考咪博士之前的教程 Python 3.6.3 官网 下载 安装 测试 入门教程 (windows) 二.官 ...

  6. BZOJ-3709-[PA2014]Bohater(贪心)

    Description 在一款电脑游戏中,你需要打败n只怪物(从1到n编号).为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点生命值.任何时候你的生命值都不能降 ...

  7. chromium 34以后中文字体粗体渲染问题

    估计不少人更新后都遇到这个情况了吧,粗体渲染如然变得很模糊,很奇怪,Google下说是字体实现方式变了,国内一些网站用的中文字体都是宋体,但是宋体本身没有粗体,Win下的粗体是微软自己通过某种方式实现 ...

  8. 翻译:MLAPP(2.3节 一些常见的离散分布)

    笔者:尝试翻译MLAPP(Machine Learning: a Probabilistic Perspective)一书,供机器学习的学者参考,如有错误理解之处请指出,不胜感激!(如需转载,请联系本 ...

  9. PHP垃圾回收机制

    一.引用计数基本知识 每个php变量存在一个叫"zval"的变量容器中,当一个变量被赋常量值时,就会生成一个zval变量容器.一个zval变量容器,除了包含变量的类型和值,还包括两 ...

  10. 将一个实体转换成 Url 参数的形式 ?a=a&b=b

    function toQueryString(obj) { var ret = []; for (var key in obj) { key = encodeURIComponent(key); va ...