存储过程的使用

  • 格式:doc
  • 大小:52.00 KB
  • 文档页数:5

存储过程

一、创建存储过程

创建存储过程的步骤:

1、 编写Transact_SQL语句;

2、 测试Transact_SQL语句

3、 若得到所需结果。则创建存储过程

4、 执行过程

/*创建存储过程 */

CREATE PROCEDURE my_procedure1

AS

select *

from orders

where orderdate>='1/1/1998' and shipcountry='USA'

GO

/* 执行存储过程 */

use northwind

go

exec my_procedure1

/* */

创建存储过程的注意事项:

1、 不要将CREATE PROCEDURE 语句与其他SQL语句组合到单个批处理中,每一个批处理就是一个go语句段

2、 具有操作权限的用户才能创建存储过程,默认为数据库所有者

3、 存储过程是个数据库对象,命名必须符合标识符规则,在命名自定义的存储过程时避免使用sp前缀,以免与系统存储过程混淆

4、 存储过程只能在当前数据库创建,最大尺寸为128MB,可以嵌套,至多嵌套32级。

二、查看存储过程的内容

1、 执行系统存储过程sp_stored_procedures来查看数据库中所有的存储过程及其所有者的列表。

2、 到企业管理器中查看

3、 执行系统存储过程sp_helptext,sp_help,sp_depends 来查看。

/*******************************/

USE Northwind

EXEC sp_stored_procedures

Go

/*******************************/

USE Northwind

EXEC sp_helptext my_procedure1 go

/*******************************/

三、创建含有输入参数的存储过程

在存储过程中可以声明一个或多个变量作为参数

声明输入参数的格式:

@parameter_name datatype[=default]

/*******************************/

USE Northwind

Go

Create proc my_procedure2

@startdate datetime,@enddate datetime,@country varchar(20)='USA'

AS

If (@startdate IS NULL or @enddate IS NULL or @country IS NULL)

BEGIN

Raiserror('NULL values are invalid',5,5)

RETURN

END

Select * from orders

Where orderdate between @startdate and @enddate and shipcountry=@country

Go

/*******************************/

四、执行含有输入参数的存储过程

1、使用参数名传递参数值

语法格式:

EXEC procedure_name

[@parameter_name=value][,…n]

/*******************************/

USE Northwind

Go

EXEC my_procedure2

@enddate='2/1/1999',

@startdate='7/1/1998'

/*******************************/

2、按位置来传递参数值

语法格式:

EXEC procedure_name

[value1,value2,…]

/*******************************/

USE Northwind Go

EXEC my_procedure2

'2/1/1998','7/1/1997','USA'

/*******************************/

五、创建含有输出参数的存储过程

语法格式:

@parameter_name datatype[=default] OUTPUT

/*******************************/

USE Northwind

Go

create procedure my_procedure3

@startdate datetime,@enddate datetime,@country varchar(20)='USA',

@recordcount int OUTPUT

AS

IF @startdate IS NULL Or @enddate IS NULL or @country IS NULL

BEGIN

raiserror ('NULL value are invalid',5,5)

return

END

select * from orders

where orderdate between @startdate and @enddate and shipcountry=@country

select @recordcount=@@ROWCOUNT

/*******************************/

六、执行含有输出参数的存储过程

/*******************************/

USE Northwind

Go

DECLARE @recordnumber int

EXEC my_procedure3

'7/1/1997','2/1/1998','Germany',@recordnumber OUTPUT

PRINT 'The order count is :'+str(@recordnumber)

go

/*******************************/

七、修改存储过程

/*******************************/

USE Northwind

Go ALTER proc my_procedure1

WITH RECOMPILE,ENCRYPTION /* RECOMPILE 为存储过程指定重编译,ENCRYPTION 对包含alter proc 文本的syscomments表中的项进行加密 */

AS

select orderid,customerid,orderdate,shipcountry

from orders

where orderdate>='1/1/1998' and shipcountry='USA'

/*******************************/

八、删除存储过程

/*******************************/

USE Northwind

Go

DROP PROC my_procedure4

/*******************************/

九、重编译存储过程

SQLServer在创建存储过程时要进行语法检查,若语法正确,则存储过程的文本将保存在syscoments系统表中,在执行存储过程时要分析该存储过程并创建执行计划,并把执行计划置于内存中,当用户改变表内数据时,可能导致原来的执行计划效率低或不可用,因此需要重新进行编译。

1、在建立存储过程时设定重编译选项

格式:

CREARE PEROCEDURE procedure_name [ WITH RECOMPILE]

/*******************************/

USE Northwind

go

CREATE PROCEDURE my_procedure1

WITH RECOMPILE

AS

select *

from orders

where orderdate>='1/1/1998' and shipcountry='USA'

GO

/*******************************/

2、在执行存储过程时设定重编译选项

procedure_name [PARAMETER] [WITH RECOMPILE]

/*******************************/

EXEC my_procedure1 WITH RECOMPILE

/*******************************/

3、通过系统存储过程来设定重编译选项 EXEC sp_recompile

/* OBJECT 为当前数据库中的存储过程、触发、*/

/*******************************/

EXEC sp_recompile Order /*表名*/

/*******************************/

十、系统存储过程和扩展存储过程

系统存储过程在master数据库中创建的,由系统管理员拥有,以sp_开头的存储过程,目的是为用户提供方便,并使用户很容易从系统表中取出信息、管理数据库,并执行更新系统表等任务。

举例:

Sp_helpsql 显示关于SQL语句,存储过程和其他对象的信息

Sp_help

提供关于存储过程或其他数据库对象的报告

Sp_helptext

显示存储过程和其他对象的文本

Sp_depends

列举引用或依赖指定对象的所有存储过程

/*******************************/

use northwind

go

exec Sp_depends orders

/*******************************/

扩展存储过程提供一种方法,动态装入和执行动态连接库内的函数,无缝地扩展SQL Server

的功能。

举例:

Xp_loginconfig 报告服务器的登录安全性配置

Xp_cmdshell 为操作系统外壳执行指定的命令串,并以文本的形式返回输出

/*******************************/

EXEC master ..xp_cmdshell "dir *.exe" /* 列出C:\WINNT\system32 的目录下文件的内容*/

/*******************************/

use master

go

EXEC xp_loginconfig

/*******************************/