数据库存储过程简介

mark,等看懂了,再进行修改


按照惯例,首先要讲讲它的优点:

(1) 把SQL代码放在存储过程里会有更好的性能,因为SQL-Server在它第一次执行时就生成并缓存了存储过程的执行计划。

(2) 使用存储过程可以更好的维护访问和操作数据的代码,它集中放在一个地方,能够使三层架构的实现更加简单。(存储过程将组成数据层)

(3) 可以更好的控制安全,因为SQL-Server允许为每一个存储过程设置不同的安全许可。

(4) 在代码中创建的SQL查询,更容易受到SQL注入攻击,这是一个很严重的安全威胁。

(5) 这或许是个人爱好,在SQL从代码中分离出来,可以使代码更易管理和更加清晰:通过存储过程名称调用比用连接字符串传递给数据库来创建一个SQL查询要好些。

下面来介绍一下存储过程的语法:

CREATE PROCEDURE <这里是存储过程名称>

AS

<这里是SQL语句>

举个例子,查询一个店的门类(比如大商场里的家电类,服装类)的信息的SQL语句

SELECT DepartmentID, Name, Description FROM Department

Department为门类信息的名,DepartmentID(主键ID), Name(门类名), Description(门类介绍)为字段。

那么他的存储过程为:

CREATE PROCEDURE GetDepartments

AS

SELECT DepartmentID, Name, Description

FROM Department

存储过程中还有两个参数:

ENCRURTION:对存储过程进行打乱,这样其中的内容就不那么容易被看到,它不加密数据,只是保护源代码不被窥视和修改。

RECOMPILE:因为数据库在它第一次执行存储过程时就生成并缓存了存储过程的执行计划,这个参数表示:每次运行存诸过程时,都重新编绎。

当在语句中加入这两个参数时,用WITH连接,例如上面的语句修改变:

CREATE PROCEDURE GetDepartments

WITH ENCRURTION, RECOMPILE

AS

SELECT DepartmentID, Name, Description

FROM Department

大家知道在SQL语句中都有WHERE关键字,这个关键字后面一般会加上查询条件,也就说某些SQL语句从数据库中获取的数据是依赖于外部参数的,显然上面的语句是不完整的,创建带参数的存储过程的语法如下:

 

 

 

 

 

 

CREATE PROCEDURE <procedure name>

[(

<parameter name> <parameter type> [=<default value >] [INPUT|OUTPUT],

<parameter name> <parameter type> [=<default value >] [INPUT|OUTPUT],

………..

………..

)]

AS

<stored procedure body>

方括号中的选项是可选的。参数也是可选的,但如果要指定,就必须放在圆括号中。对于每个参数,至少必须提供名称和数据类型。

可以为参数提供一个默认值。这样,如果调用函数没有给参数提供一个值,就会用默认值代替。也可以指定参数是输入参数还是输出参数。在默认的情况下,所有的参数都是输入参数。输出参数的值是在存储过程中设置的,在存储过程执行之后,由调用函数读取。

存储过程参数的处理和其他SQL一样,它们的名字都是以@开头的,如@DepartmentID等。在存储过程里给输出参数赋值的最简单的语法,就像下面这样:

SELECT @ DepartmentID=5

下面举一个简单的带参数的存储过程的例子:

接着上面的例子,如果要根据DepartmentID 来查询这是哪个分类,这时就需要创建带参数的存储过程:

CREATE PROCEDURE GetDepartmentDetails

(@DepartmentID int)

AS

SELECT Name, Description

FROM Department

WHERE DepartmentID=@ DepartmentID

现在介绍下在VS2005中如何把GetDepartments 存储过程加到数据库中。(^_^别的俺也不会)

(1)确保在Database Explorer(数据库资源管理器)中展开并选中数据库的数据连接。选择Data---Add New----Stored Procedure。或是,在Database Explorer中右击存储过程节点,选择Add New Stored Procedure.

(2)把默认的文本替换为你的GetDepartments存储过程:

CREATE PROCEDURE GetDepartments

AS

SELECT DepartmentID, Name, Description

FROM Department

(3)按Ctrl+S保存存储过程。与表不同,这时不会再要求你指定一个名称,因为数据库已经可以从存储过程的语句中知道名称了。

(4) 现在,测试一下你输入的存储过程吧,看看它的实际工作。在Database Explorer中,找到GetDepartments存储过程节点,然后选择Execute(执行),在运行了存储过程之后,在输出窗口中可以看到执行结果。

转载自:http://blog.csdn.net/wizard1/article/details/2472275

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值