今天讲下T-sql语法中存储过程的用法,我们一开始学习数据库语言的时候就是用一些简单的insert,select等语法,但是随着我们学习数据库的深入,就会发现一些简单的语法满足不了我们的要求,比如处理一些业务逻辑,多表关联的时候,还有就是虽然程序或是简单的sql语句也会实现其效果,但是性能或是效率会很低。

  这时候我们就会用到T-sql中的存储过程,存储过程就像C#中的方法一样,传递参数,执行一些操作,返回相应的值。

  我们用SQLSERVER2008自带的AdventureWorks示例数据库来讲解。

  首先我们新建一个存储过程,关键字为Procedure,示例代码: 

create procedure proc_Sales_SalesReason
as
begin
select * from Sales.SalesReason;
end

  我们新建的一个proc_Sales_SalesReason存储过程,执行查询操作,一般存储过程命名为proc_+名称,这样有利于识别。

  执行存储过程示例代码:

execute proc_Sales_SalesReason

drop procedure  proc_Sales_SalesReason    --删除存储过程

  修改存储过程的话用alter关键字。

  以上只是简单的存储过程,就想无参数的方法一样,下面是带参数的示例代码:

create procedure proc_Sales_SalesReason
(@SalesReasonID int,
@Name nvarchar(50),
@ReasonType nvarchar(50),
@ModifiedDate datetime)
as
begin
insert into Sales.SalesReason(SalesReasonID, Name, ReasonType, ModifiedDate)
values(@SalesReasonID, @Name, @ReasonType, @ModifiedDate);
end

  这是一个执行插入数据的存储过程,执行示例代码:

execute proc_Sales_SalesReason 100,'text1','as','2011-12-12';

  以上讲解的都是一些简单存储过程的用法,在这里只是起到抛砖引玉的作用,大家可以有时间好好研究下,去处理一些复杂的业务逻辑。

  下面我做了一个小示例

  select :按价格范围来查询
  要求:如果两个参数均存在,则表示查询该指定范围的内容;
  若均不存在,则查询所有
  若@PriceFrom参数存在,则,查询>=@PriceFrom
  @priceTo存在,则<=@priceTo

create procedure proc_SelectProductsWithPriceRange
(
@PriceFrom money,
@priceTo money
)
as
begin
if @PriceFrom is not null
begin
if @priceTo is not null
begin
select *from dbo.Products
where Price between @PriceFrom and @priceTo;
end
else
begin
select *from dbo.Products
where Price>=@PriceFrom;
end
end;
else
begin
if @priceTo is not null
begin
select *from dbo.Products
where Price<=@priceTo;
end
else
begin
select *from dbo.Products
end
end
end;

  执行存储过程:

execute proc_SelectProductsWithPriceRange 17,null

  其实这些代码都是大学时候学习的时候整理的,现在写这些算是去复习一下,也想去帮助那些刚刚踏入编程行业的学子们(大牛们请飘过),我想在年前把这两年整理的一些编程知识系统的整理下来,当然都是一些简单的,并附一些示例,希望帮助初学者去理解,还希望大家关注一下。。。

T-Sql(三)存储过程(Procedure)的更多相关文章

  1. PL/SQL 05 存储过程 procedure

    --存储过程(不带参数) create or replace procedure 存储过程名as  变量.常量声明;begin  代码;end; --存储过程(带输入参数) create or rep ...

  2. sql server 存储过程 procedure

    https://www.cnblogs.com/selene/p/4483612.html

  3. SQL Server 数据库的维护(一)__存储过程(procedure)

    --维护数据库-- --存储过程(procedure)-- --概述: SQl Serve的存储过程是由一个或多个T-SQL语句组成的一个集合.常用的程序代码段通常被创建成存储过程,一次创建多次调用, ...

  4. [转]SQL Server 存储过程 一些常用用法(事物、异常捕捉、循环)

      最新更新请访问: http://denghejun.github.io Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中 ...

  5. 使用PL/SQL编写存储过程访问数据库

    一.实验目的 熟悉使用存储过程来进行数据库应用程序的设计. 二.实验内容 对学生-课程数据库,编写存储过程,完成下面功能: 1.统计离散数学的成绩分布情况,即按照各分数段统计人数: 2.统计任意一门课 ...

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

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

  7. Delphi调用SQL分页存储过程实例

    Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...

  8. sql server 存储过程使用游标记录

    sql server 存储过程使用游标记录--方便下次参考使用 游标的组成: 声明游标 打卡游标 从一个游标中查找信息 关闭游标 释放游标 游标类型: 静态游标 动态游标 只进游标 键集驱动游标 静态 ...

  9. SQL Server存储过程 对数组参数的循环处理

    方法一 分割 例:通过SQL Server存储过程传送数组参数删除多条记录 eg. ID 值为'1,2,3' 以下存储过程就是删除表中id号为1,2,3的记录: CREATE PROCEDURE De ...

  10. sql 在存储过程中使用事务(转)

    本来想自己写一下,后来发现这个写的比我理解的要好,所以直接拽过来了,链接地址:https://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737 ...

随机推荐

  1. java反射学习之一反射机制概述

    一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...

  2. CSS hack技巧大全

    ——作者:吴雷君 兼容范围: IE:6.0+,FireFox:2.0+,Opera 10.0+,Sarari 3.0+,Chrome 参考资料: 各游览器常用兼容标记一览表: 标记 IE6 IE7 I ...

  3. DBUtils 笔记

    一.DBUtils介绍  apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...

  4. *HDU1846HDU2188 巴什博奕

    Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. bzoj1455: 罗马游戏 + bzoj2809: Dispatching(可并堆)

    昨天看了可并堆是什么,写的是左偏树 大概就是一棵树 1.有左偏性质,即当前根到左叶子节点距离比到右叶子节点距离大 2.有堆性质,堆顶关键字比子树关键字小 合并两个堆的时候,关键字大的插入到关键字小的那 ...

  6. HTML打折计算价格

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <met ...

  7. Android中Intent的用法总结

    Intent只在Android中特有,我把它比作一种运载工具,就像飞机一样,会把一些人带到某个地方,而且如果需要的话,还可以找到机上有哪些人员(数据),这就需要另外一些设备来支持(如:Bundle), ...

  8. 多线程导出大规模excel文件

    文章有点水,和前几篇没有太大区别,但是单线程处理大文件导出会非常耗时间,用到多线程才能更加合理的利用资源.大文件也可能会超出excel工作表范围.这里也有相应处理 参考:用DataGridView导入 ...

  9. .NET中的DES对称加密

    DES是一种对称加密(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法.一般密码长度为8个字节,其中56位加密密钥, ...

  10. 备忘-Android ViewPager 与Gallery滑动冲突解决方法

    解决方法,重新定义gallery,禁止触发pager的触摸事件 1 public class UserGallery extends Gallery implements OnGestureListe ...