文章的下半部分有一些实例
一.存储过程的特点和类型
存储过程可以提高应用程序的设计效率和系统的安全性。存储过程是一个可重用的代码模块,可以高效的地完成指定的操作。
使用Transact-SQL语言编写存储过程
使用Transact-SQL语言编写存储过程而不是用存储在客户端的计算机上的Transact-SQL语言有许多优点:
1.存储过程已经在服务器上注册,这样可以提高执行的效率
2.存储过程具有安全特性和所有权链接,可以执行所有的权限管理。这样的话,用户只用被赋予对存储过程的执行权限而不用对存储过程中引用的对象的执行权限
3.存储过程可以强制应用程序的安全性,防止SQL嵌入式攻击
4.存储过程允许模块化的程序设计,大大提高程序的设计效率
5.存储过程是一组命令代码,允许延迟绑定。简单的说就是,存储过程中可以引用当前不存在的对象,不过在存储过程运行时,这个对象应该是存在的 存储过程可以大大减少网络通信的流量
二.存储过程类型
用户自定义存储过程是主要的存储过程类型,是封装了可重用代码的模块或例程。用户自定义的存储过程可以接收参数、像、向客户端返回表格或标量结果和消息、调用数据定义语言、数据操纵语言语句,然后返回参数。
扩展存储过程是指使用某种编程语言创建的外部例程,是在Microsoft SQL Server实例中动态家在和运行的DLL。
三. 创建存储过程的规则
在设计和创建存储过程时,应该满足一些约束和规则。只有满足了这些约束和规则,才可以创建有效的存储过程。
虽然说CREATE PROCEDURE语句中可以包含任意数量和类型的Transact-SQL语句,但是某些特殊的语句是不能包含在存储过程的定义中的。不能包含的特殊语句如下:
CREATE AGGREGATE
CREATE DEFAULT
CREATE FUNCTION
CREATE PROCEDURE
CREATE RULE
CREATE SCHEMA
CREATE TRIGGER
CREATE VIEW
CREATE PARSEONLY
SET SHOWPLAN_TEXT
SET SHOWPLAN_ALL
SET SHOWPLAN_XML
USE database_name
除了上述的create语句以外,其他的数据库对象都可以在储存过程中创建,只要引用时,该对象已经创建就可以。也可以在存储过程中引用临时表。如果存储过程创建本地临时表,那么该临时表只存在与该存储过程内。退出该存储过程之后,相应的临时表也就消失了。如果正在执行的存储过程调用了另一个存储过程,被调用的存储过程可以访问由第一个存储过程创建的所有的对象,包括临时表在内。存储过程可以带有参数,但是参数的最大数量不能超过2100.
四. 使用CREATE PROCEDURE语句创建存储过程
使用create procedure语句创建存储过程,不过呢,需要强调的是,必须具备CREATE PROCEDURE权限才能创建存储过程,存储过程是架构作用域中的对象,只能在本地数据库中创建存储过程。在创建过程中,应该指定所有的输入参数、执行数据库操作的编程语句、返回值调用过程或批处理表明成功或失败的状态值、捕捉和处理潜在的错误的错误处理语句。
CREATE PROCEDURE语句创建存储过程的基本语句形式
CREATEPROCEDURE 存储过程名称
@参数1 参数类型,
@参数2参数类型
………………………………..(当然可以有参数,也可以无参数)
AS
SQL编程
举个例子来看吧:
现在数据库中定义一个测试表,我的表名:ware
例一:没有参数
create procedurewareshow
as
select * from ware
go
可以使用EXECUTE语句执行存储过程,EXECUTE语句可以简写为EXEC所以,想要执行上面的存储过程这样写就行啦:
execwareshow
go
例二:有参数,无返回值
createprocedurewareshow
@wareid int
as
select *
from ware
执行上述存储过程需要传入参数
(一).直接实例化的实际值
execwareshow
4(你可以根据自己的存储过程,用合适的参数)
Go
(二).当然这里传的参数也可以是自定义的参数传值
DEclare@aint
Set@a=4;
exec wareshow
@a
Go
例三:有返回值的
这次我定义一个返回两个数值之和的存储过程
createprocedureComputePlus
@compute1 DECIMAL(10,2),
@compute2 DECIMAL(10,2),
@compute3 DECIMAL(10,2)OUTPUT--(有返回值的,--必须用OUTPUT注明返回值)
AS
SET @compute3=@compute1+@compute2
go
创建以后就可以执行这个存储过程了,这种有返回值的存储过程执行时与前两种有所不同
执行语句:
declare @Compute1 int
declare @Compute2 int
declare @Compute3 int
set @Compute1=10;
set @Compute2=20;
EXEC ComputePlus
@Compute1,@Compute2,@Compute3OutPut
print @Compute3--(这里只是在输出返回值)
GO
u 存储过程的修改与删除
存储过程可以根据自己的需求进行修改和删除
l 修改语句是:以上面第三个有返回值的为例,修改时需要用的是
ALTER PROCEDURE语句
ALTERprocedure[dbo].[ComputePlus]
@compute1 DECIMAL(10,2),
@compute2 DECIMAL(10,2),
@compute3 DECIMAL(10,2)OUTPUT
AS
set @compute3=@compute1+@compute2
go
l 删除语句
用DROP PROCEDURE就行啦
例:DROPPROCEDUREwareshow
go
u 存储过程的执行过程
存储过程创建之后,在第一次执行时余姚经过语法分析阶段、解析阶段、编译阶段和执行阶段,具体的细节在网上这些都能找到,名词解释。这个就不多说啦