SQL Server 存储过程初识
时间:2010-09-29 来源:GreenSoft
最近开始接触存储过程这个概念,在网上搜了挺多资料,把自己的心得和体会写于此,希望多多交流,不足之处请多指点。
首先,什么是存储过程,说法纷杂不一,简单说来是存储在数据库中的一条或多条SQL语句的集合,它封装了重复性的工作,可以像方法调用一样使用存储过程。那么和普通的SQL语句有什么区别呢?或者它有什么好处呢?
--存储过程是在创建的时候编译的,使用的时候不用编译,普通的SQL语句每次使用的时候都需要编译的,所以存储过程在性能上是占有优势的。
--存储过程是封装了一些复杂的,重复性的工作,容易管理和方便使用。
--创建存储过程是需要权限的,可以准许用户使用存储过程,但不能创建,提高了安全性。
那么,来看下怎么创建存储过程。在数据库中新建一个查询,输入以下内容:
CREATE PROCEDURE USP_MyFirstProcedure AS BEGIN SELECT * FROM T_table END
上面就是一个简单的存储过程。当然也可以在数据库下可编程性中的存储过程选项点击右键,选择新建存储过程来创建一个存储过程。USP_MyFirstProcedure是存储过程名,BEGIN和END用来限定存储过程体,这里存储过程体就是一个简单的select语句,当然,这里可以是任意的合法的SQL语句。这样并没有得到返回的数据,怎么样来使用它呢?
EXECUTE USP_MyFirstProcedure
执行刚创建的存储过程,并显示返回的结果。在输出中就可以看到返回了T_table这张表。
EXEC USP_MyFirstProcedure 是和上面等价的用法。
上面是一个简单的存储过程,下面我们来看看怎么给存储过程传递参数以及通过变量返回一个结果。
CREATE PROCEDURE USP_GetUserAddress @Name nvarchar(50), @Address nvarchar(50) output AS BEGIN SELECT @Address=Address FROM T_table WHERE Name=@Name END DECLARE @UserAddress nvarchar(50) EXEC USP_GetUserAddress 'Tom',@UserAddress output SELECT @UserAddress
此存储过程接收两个参数,@Name用来指定要查询的对象,@Address后面的output关键字用来指出这个参数用来从存储过程传出一个值,返回给调用者,没有output修饰,变量只能用来给存储过程传递值。
DECLARE 声明一个变量,在调用存储过程时候不要忘记@UserAddress后面的output关键字,然后用select @UserAddress检索出来地址。
这样我们就学会了怎么给存储过程传递参数并从存储过程取得返回值,至于存储过程体内部的内容,是和SQL语句相关的,不在我们讨论范围之内。
最后,如果想要删除已个存储过程,只要向删除已个表一样使用DROP就可以。
DROP PROCEDURE USP_GetUserAddress
这样我们就删除了一个存储过程。
关于存储过程的复杂应用以后继续讨论,欢迎各位评论指出错误之处。谢谢~