SQL Server 2005数据库简明教程-第8章 存储过程的操作与管理
SQL Server 2005存储过程

BEGIN
DECLARE @Count INT
DECLARE @StrSQL VARCHAR(2000)
SET @Count = (SELECT COUNT(*) FROM myDATA_Details WHERE DealerID = @DealerID)
END
F5一下,创建成功,调用它插入数据,OK,没问题插入成功,达到了预期的目的。可是,我在建立第二个存储过程的时候,虽然将插入操作改为了更新,但是再像上面这么写就出错了,代码如下:
CREATE PROCEDURE PROC_INSERT_DATA_DETAIL
@DealerID varchar(50),
语法
@@CPU_BUSY
返回类型
integer
示例
下面的示例显示了到当前日期和时间为止 SQL Server CPU 的活动。
SELECT @@CPU_BUSY AS 'CPU ms', GETDATE() AS 'As of'
下面是结果集:
CPU ms As of
将存储过程的名字,参数,操作语句写好后,点击语法分析,没有错误就直接“F5”运行就好了,hoho。存储过程创建完毕,好快啊。以下是一个基本的存储过程的代码:
CREATE PROCEDURE Get_Data
(
@Dealer_ID VARCHAR(50)
语法
@@DATEFIRST
返回类型
tinyint
注释
美国英语中默认 7 对应星期日。
示例
下面的示例将每周第一天设为 5 (星期五),并假定当日是星期六。SELECT 语句返回 DATEFIRST 值和当日是此周的第几天。
SQL Server2005使用与管理

SQL Server使用与管理深入理解SQL Server的规划和安装2009-04-11 22:26:57标签:windows Server SQL数据库[推送到技术圈]版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。
否则将追究法律责任。
/418026/148680深入理解SQL Server的规划和安装实验背景:在IT技术高速发展、互联网已渗透到千家万户。
对于一个国家、一个企业甚至一个家庭来说,数据安全、可靠、高效的存储已成为重中之重的话题,任何一个投入运行的信息系统中,都会有一个数据库管理系统(DBMS)作为支撑。
因此,作为信息系统核心和基础的数据库技术得到了越来越广泛的应用,数据库技术也随着现实的需求迅速发展,目前主流的数据库管理系统主要有Microsoft公司出的SQL Server;甲骨文公司出的Oracle;还有IBM公司出的DB2,其中DB2主要应用于电子商务方面,更多的和IBM服务器集成在一起运用;Oracle是目前世界上最好的数据库系统,主要应用于一些大型的企业平台,比如电信、移动和联通等公司,由于Oracle技术和管理的复杂性,管理人员在这方面必须具备很强的技术和丰富的经验才能胜任;而企业更多的应用是SQL Server,它和Microsoft的服务器系统构成一套完整的体系,性能上也比较突出,价格相对应其它数据库较低,部署起来也是相当的方便。
本系列课程主要是针对SQL Server 2005 EnterpriseEdition进行讨论。
实验目的:1、了解SQL Server 2005数据库的基本概念2、安装SQL Server 2005 Enterprise Edition(软硬件要求和安装过程)3、 SQL Server 2005安装组件的具体介绍4、 SQL Server 2005常用管理工具的具体介绍5、 SQL Server 2005数据库(系统和用户)的具体介绍6、理解SQL Server 2005数据存储结构7、简单介绍DBA的主要职责实验步骤1. SQL Server 2005 Enterprise Edition的安装1.1、安装前的准备工作Microsoft公司的SQL server 2005产品主要分为企业版(Enterprise)、标准版(Standard)、工作组版(Workgroup)、精简版(Express)和开发版(D eveloper Edition)。
SQLServer2005

第一章 数据库的基本操作
一、新建数据库
语法格式:
CREATE DATABASE 数据库名 [ON {[PRIMARY] (NAME=‘逻辑文件名’ (NAME=‘逻辑文件名’, FILENAME=‘物理磁盘文件名’ FILENAME=‘物理磁盘文件名’ [,SIZE=文件初始大小] [,SIZE=文件初始大小] [,MAXSIZE={文件最大长度 [,MAXSIZE={文件最大长度 |UNLIMITED}] [,FILEGROWTH=文件增长方式]) [,FILEGROWTH=文件增长方式])
第三章 表数据的基本操作
一、数据的添加、修改和删除 1、数据的添加(INSERT命令) 语法格式: INSERT INTO 表名(列名1,列名2,列名 3,……) VALUES(值1,值2,值3,……) /* 列名列表可省略 */ 或 INSERT INTO 表名 (SELECT 子句)
•例: (1)INSERT INTO xsda(sno,sname,sex,birth,grade) VALUES (‘S01’,‘张三’,‘男’,‘1980-1-13’,135.5) (2)INSERT INTO xsda VALUES(‘S02’,‘李四’,‘女’, ‘981-2-20’,124.5) (3)INSERT INTO xsda (SELECT * FROM xsda1 WHERE sex=‘男’)
注意:如果同时约束表中的多列最好用表级约束, 注意:如果同时约束表中的多列最好用表级约束,例如, 创建下表的主键同时为sno和cno 创建下表的主键同时为 例3:创建xscj表结构 CREATE TABLE xscj ( sno CHAR(3) FOREIGN KEY REFERENCES xsda(sno), cno CHAR(3) FOREIGN KEY REFERENCES kc(cno), grade DECIMAL(4,1) CHECK(grade between 0 and 100), score INT DEFAULT 0, PRIMARY KEY (sno,cno) )
sql sever 数据库 入门-存储过程

上一页
下一页
返回本章首页
第5章
数据库对象的操作
创建存储过程时,需要确定存储过程的三个组 成部分:
①所有的输入参数以及传给调用者的输出参数。 ②被执行的针对数据库的操作语句,包括调用 其它存储过程的语句。 ③返回给调用者的状态值,以指明调用是成功 还是失败。
上一页
下一页
返回本章首页
第5章
数据库对象的操作
如果这是 isql 脚本或批处理中第一个语句,则 EXEC 语句可以省略:
showind titles或者showind @tabname = titles
上一页
下一页
返回本章首页
第5章
数据库对象的操作
5.5.3 查看和修改存储过程
查看存储过程 存储过程被创建之后,它的名字就存储在系统表 sysobjects中,它的源代码存放在系统表syscomments 中。可以使用使用企业管理器或系统存储过程来查看 用户创建的存储过程。
上一页
下一页
返回本章首页
第5章
数据库对象的操作
5.5.1 创建存储过程
在SQL Server中,可以使用三种方法创建存储过 程: ①使用创建存储过程向导创建存储过程。 ②利用SQL Server 企业管理器创建存储过程。 ③使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程。
第5章
数据库对象的操作
5.5 存储过程
5.5.1 创建存储过程 5.5.2 执行存储过程 5.5.3 查看和修改存储过程 5.5.4 重命名和删除存储过程
上一页
下一页
返回本章首页
第5章
数据库对象的操作
存储过程的概念
SQL Server提供了一种方法,它可以将一些固定 的操作集中起来由SQL Server数据库服务器来完成, 以实现某个任务,这种方法就是存储过程。 在SQL Server中存储过程分为两类:即系统提供 的存储过程和用户自定义的存储过程。
实验二 SQL Server 2005的数据库管理

实验二SQL Server 2005的数据库管理一、目的与要求1、掌握SQL Server Management Studio “对象资源管理器"的建立、修改和删除数据库的操作方法;2、掌握T—SQL语言建立、修改和删除数据库的方法。
二、实验准备1、明确登录用户具有创建、修改和删除数据库的权限;2、了解SQL语言创建、修改和删除数据库的基本语法。
三、实验内容(一)对象资源管理器中数据库的管理1、按默认属性创建第一个数据库“mydb":在对象资源管理器中,右击目录树中的“数据库" 选择“新建",设置新数据库名为mydb,然后点击“确定”。
请完成下列填空:(1)数据文件的逻辑文件名是mydb(2)数据文件的物理文件名是mydb.mdf(3)数据文件的保存位置C:Program Files\Microsoft SQL Server\MSSQL.1\DATA(4)数据文件的初始大小为3MB(5)数据文件的增长方式为自动增长,增量为1MB(6)数据文件的最大大小为不限制增长(7)事务日志文件的逻辑文件名是mydb_log(8)日志文件的物理文件名是mydb_log。
ldf(9)日志文件的保存位置C:Program Files\Microsoft SQL Server\MSSQL.1\DATA(10)日志文件的初始大小是1MB2、按要求设定存储属性,创建数据库studentdb,在E盘中先建立一个以学号命名的文件夹,用以保存文件或命令脚本.本题以截图保存运行过程和结果.要求:主数据文件逻辑名stu_data,物理位置为“E:\学号文件夹”,初始大小为3MB,最大大小为10MB,增长方式为1MB。
日志文件逻辑名stu_log,物理位置为“E:\学号文件夹”,初始大小为1MB,最大大小为5MB,增长方式为5%.3、修改studentdb数据库的名称为studb.4、删除studb数据库。
第8章 存储过程与触发器

2.通过设置使存储过程自动执行
在SQL Server 2005中,可以通过设置 使指定的存储过程在服务器启动的时候自 动执行。 这种设置对于一些应用很有帮助,例如 用户希望某些操作周期性地执行,某些操 作作为后台进程完成,某些操作一直保持 运行。 另外的一些应用也可能需要一些存储过 程自动执行。
用户必须是固定服务器角色 sysadmin的成员才可以设置指定的存 储过程为自动执行的存储过程。 下面将一个存储过程设置为自动执 行的存储过程, sp_procoption的 语法结构:
8.3
执行存储过程
1.通过Execute或Exec语句执行
EXECUTE语句用于执行存储在服务器 上的存储过程,也可以简写成EXEC语句。
语法:
[[EXEC[UTE]] {[@return_status=] {procedure_name|@procedure_name_var} [[@parameter=]{value|@variable[OUTPUT ]|[DEFAULT]}[,...n]]}]
其中,各参数的意义如下: schema_name:过程所属架构的名称。 procedure_name:新存储过程的名称。 @ parameter:过程中的参数。 [ type_schema_name. ] data_type:参数以 及所属架构的数据类型。 VARYING:指定作为输出参数支持的结果集。 仅适用于cursor参数。
其中,各选项的含义如下: EXECUTE:执行存储过程的命令关键字。 @return_status:是一个可选的整型变量, 保存存储过程的返回状态。 procedure_name:指定执行的存储过程的名 称。 @procedure_name_var:是局部定义变量名, 代表存储过程名称。 @parameter:是在创建存储过程时定义的过 程参数。
实验1-Sql-Server2005的基本操作
实验1-SQL-Server 2005的基本操作实验背景SQL-Server是一种基于Windows操作系统的关系型数据库管理系统。
在实际开发工作中,我们需要对数据库进行增删改查等操作,因此学习SQL-Server的基本操作是非常必要的。
本实验将介绍SQL-Server 2005的基本操作,包括创建数据库、创建表、插入数据、查询数据等常用操作。
实验目的1.理解SQL-Server的基本概念和原理2.掌握SQL-Server 2005的基本操作3.能够利用SQL-Server 2005完成常用的数据操作实验步骤步骤一:创建数据库在SQL-Server 2005中,我们可以通过以下步骤来创建数据库:1.打开SQL-Server Management Studio软件2.在Object Explorer中,右击“Databases”文件夹,选择“New Database”3.在弹出的“New Database”对话框中,输入数据库的名称,选择数据库的文件路径和文件名等相关信息4.点击“OK”按钮,等待数据库创建完成步骤二:创建表在创建完数据库之后,我们需要在数据库中创建表。
创建表的步骤如下:1.在Object Explorer中,选择刚创建的数据库,右键选择“New Query”2.在新建的查询窗口中,输入以下SQL语句:CREATE TABLE [表名] ([列1名称] [列1类型] [列1属性],[列2名称] [列2类型] [列2属性],...)注:表名、列名、类型和属性可以根据实际情况进行修改。
3.执行SQL语句,等待表创建完成步骤三:插入数据创建表之后,我们需要向表中插入数据。
插入数据的步骤如下:1.在Object Explorer中,找到刚刚创建的表,右键选择“Edit Top 200Rows”或“Select Top 1000 Rows”2.在弹出的窗口中,输入需要插入的数据内容3.点击“保存”按钮,等待数据插入完成步骤四:查询数据插入数据之后,我们可以使用以下SQL语句来查询数据:SELECT [列1名称], [列2名称], ...FROM [表名]WHERE [条件]注:列名和表名可以根据实际情况进行修改,条件为可选项。
SQl Server 2005&2000存储过程
/****** 对象: StoredProcedure [dbo].[up_Page2005V2] 脚本日期: 05/21/2008 11:27:15 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: <Author,,Name>-- Create date: <Create Date,,>-- Description: <Description,,>-- =============================================CREATE PROCEDURE[dbo].[up_Page2005V2]@TableName varchar(50), --表名@Fields varchar(5000) ='*', --字段名(全部字段为*)@OrderField varchar(5000), --排序字段(必须!支持多字段) @sqlWhere varchar(5000) =Null,--条件语句(不用加where)@pageSize int, --每页多少条记录@pageIndex int=1 , --指定当前为第几页@totalRecord int=0,@TotalPage int output --返回总页数ASBEGINBegin Tran--开始事务Declare@sql nvarchar(4000);if@totalRecord<=0begin--计算总记录数if (@SqlWhere=''or@sqlWhere=NULL)set@sql='select @totalRecord = count(*) from '+ @TableNameelseset@sql='select @totalRecord = count(*) from '+ @TableName+' with(nolock) where '+@sqlWhereEXEC sp_executesql @sql,N'@totalRecord intOUTPUT',@totalRecord OUTPUT--计算总记录数end--计算总页数select@TotalPage=CEILING((@totalRecord+0.0)/@PageSize)if (@SqlWhere=''or@sqlWhere=NULL)set@sql='Select * FROM (select ROW_NUMBER() Over(order by '+@OrderField+') as rowId,'+@Fields+' from '+@TableName elseset@sql='Select * FROM (select ROW_NUMBER() Over(order by '+@OrderField+') as rowId,'+@Fields+' from '+@TableName +' with(nolock) where '+@SqlWhere--处理页数超出范围情况if@PageIndex<=0Set@pageIndex=1if@pageIndex>@TotalPageSet@pageIndex=@TotalPage--处理开始点和结束点Declare@StartRecord intDeclare@EndRecord intset@StartRecord= (@pageIndex-1)*@PageSize+1set@EndRecord=@StartRecord+@pageSize-1--继续合成sql语句set@Sql=@Sql+') as t where rowId between '+Convert(varchar(50),@StartRecord) +' and '+Convert(varchar(50),@EndRecord)print@sqlExec(@Sql)---------------------------------------------------If@@Error<>0BeginRollBack TranReturn-1EndElseBeginCommit TranReturn@totalRecord---返回记录总数EndENDGO2005/****** 对象: StoredProcedure [dbo].[up_Page2005V2_Join] 脚本日期: 05/21/2008 11:27:30 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE[dbo].[up_Page2005V2_Join]@TableName varchar(150), --表名@Fields varchar(5000) ='*', --字段名(全部字段为*)@OrderField varchar(5000), --排序字段(必须!支持多字段) @sqlWhere varchar(5000) =Null,--条件语句(不用加where)@pageSize int, --每页多少条记录@pageIndex int=1 , --指定当前为第几页@totalRecord int=0,@TotalPage int output --返回总页数ASBEGINBegin Tran--开始事务Declare@sql nvarchar(4000);if@totalRecord<=0begin--计算总记录数if (@SqlWhere=''or@sqlWhere=NULL)set@sql='select @totalRecord = count(*) from '+ @TableNameelseset@sql='select @totalRecord = count(*) from '+ @TableName+' where '+@sqlWhereEXEC sp_executesql @sql,N'@totalRecord intOUTPUT',@totalRecord OUTPUT--计算总记录数end--计算总页数select@TotalPage=CEILING((@totalRecord+0.0)/@PageSize)if (@SqlWhere=''or@sqlWhere=NULL)set@sql='Select * FROM (select ROW_NUMBER() Over(order by '+@OrderField+') as rowId,'+@Fields+' from '+@TableName elseset@sql='Select * FROM (select ROW_NUMBER() Over(order by '+@OrderField+') as rowId,'+@Fields+' from '+@TableName +' where '+@SqlWhere--处理页数超出范围情况if@PageIndex<=0Set@pageIndex=1if@pageIndex>@TotalPageSet@pageIndex=@TotalPage--处理开始点和结束点Declare@StartRecord intDeclare@EndRecord intset@StartRecord= (@pageIndex-1)*@PageSize+1set@EndRecord=@StartRecord+@pageSize-1--继续合成sql语句set@Sql=@Sql+') as t where rowId between '+ Convert(varchar(50),@StartRecord) +' and '+Convert(varchar(50),@EndRecord)print@sqlExec(@Sql)--------------------------------------------------- If@@Error<>0BeginRollBack TranReturn-1EndElseBeginCommit TranReturn@totalRecord---返回记录总数EndEND2000。
第八章 SQL Server 2005数据库管理
20112011-2-25
主讲:王颂华
11
20112011-2-25
主讲:王颂华
4
8.2 SQL Server 2005数据库 2005数据库 ALTER DATABASE database_name 操作 { ADD FILE <filespec> [ ,...n ]
[TO FILEGROUP {filegroup_name | DEFAULT} ] | ADD LOG FILE <filespec> [ ,...n ] | REMOVE FILE logical_file_name | MODIFY FILE <filespec>} <filespec>::= ( NAME = logical_file_name [ , NEWNAME = new_logical_name] [ , FILENAME = 'os_file_name’] 'os_file_name’ [ , SIZE = size [KB | MB | GB | TB]] [ , MAXSIZE = {max_size [KB | MB | GB | TB] | UNLIMITED } ] [ , FILEGROWTH = growth_increment [KB | MB | GB | TB| %] ] [ , OFFLINE]) <add_or_modify_filegroups>::= { | ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name | MODIFY FILEGROUP filegroup_name {<filegroup_updatability_option> | DEFAULT 20112011-2-25 主讲:王颂华 | NAME = new_filegroup_name }}
SQL Server2005数据库应用技术第8章 使用存储过程和游标
– @参数2:用于接收来自存储过程的返回参数,使用前 必须先定义。
8.1.6 执行存储过程
(2)使用SSMS执行存储过程 使用SQL Server Management Studio执行存
储过程的基本步骤演示。
8.2 管理和维护存储过程
8.3.1 游标
游标实质是系统开设的一个存储缓冲区,用于 存放T-SQL语句执行的结果集,提供了一种可以让 应用程序从包括多条数据记录的结果集中每次提取 一条记录的机制,实现逐行控制数据的能力,它由 结果集和定位标记构成。
通过游标,可以对结果集进行定位、检索和修 改。在SQL Server 2005中,游标的生命周期包含声 明游标、打开游标、使用游标、关闭游标和释放游 标5个阶段。
8.3.2 使用游标的优点
– 允许程序对由查询语句SELECT返回的行集合中的每 一行数据执行相同或不同的操作,而不是对整个行集 合执行同一个操作。
– 提供对基于游标位置的表中的行进行更新和删除的能 力。
– 游标作为面向集合的数据库管理系统(RDBMS)和面 向行的程序设计之间的桥梁,使这两种处理方式通过 游标沟通起来。
8.1.2 使用存储过程的优点
使用存储过程的优点:
– 减少了网络通信量 – 加快了系统运行速度 – 提高了系统适应性 – 加强了系统安全性 – 增强了代码重用性
ห้องสมุดไป่ตู้
8.1.3 存储过程的分类
(1)系统存储过程 系统存储过程是在安装SQL Server 2005时, 系统创建的存储过程,以“sp_”为前缀,存储在 master数据库中。 (2)扩展存储过程 扩展存储过程允许用户使用编程语言创建用户 的外部例程,它们以动态链接库的形式存在,其前 缀为“xp_”,扩展存储过程实现数据库实例在自己 的地址空间上动态加载和运行动态链接库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图8-3 查看存储过程
8.2.1 查看存储过程
(2)使用系统存储过程来查看用户创建的存储过程 。
可供使用的系统存储过程及其语法形式如下: •sp_help,用于显示存储过程的参数及其数据类型,其语法为: sp_help [[@objname=] name],参数name为要查看的存储过程的名称。 •sp_helptext,用于显示存储过程的源代码,其语法为: sp_helptext [[@objname=] name],参数name为要查看的存储过程的名称。 •sp_depends,用于显示和存储过程相关的数据库对象,其语法为: sp_depends [@objname=]’object’,参数object为要查看依赖关系的存储过程 的名称。 •sp_stored_procedures,用于返回当前数据库中的存储过程列表,其语法为: sp_stored_procedures[[@sp_name=]'name'] [,[@sp_owner=]'owner'] [,[@sp_qualifier =] 'qualifier'] 其中,[@sp_name =] 'name' 用于指定返回目录信息的过程名;[@sp_owner =] 'owner' 用于指定过程所有者的名称;[@qualifier =] 'qualifier' 用于指定过程 限定符的名称。
8.2查看、修改和删除存储过程
8.2.1 查看存储过程 8.2.2 修改存储过程
8.2.3 重命名和删除存储过程
8.2.1 查看存储过程
(1)使用SQL Server管理平台查看用户创建的存储过程。 在SQL Server管理平台中,展开指定的服务器和数据库,选择并依次展开“程序→存储 过程”,然后右击要查看的存储过程名称,如图8-3所示,从弹出的快捷菜单中,选择 “创建存储过程脚本为→CREATE到→新查询编辑器窗口”,则可以看到存储过程的源 代码。
8.1 创建存储过程
•CREATE PROCEDURE的语法形式如下: CREATE {PROC|PROCEDURE} [schema_name.]procedure_name[;number] [{@parameter[type_schema_name.] data_type} [VARYING][=default][[OUT[PUT]][,...n] [WITH <procedure_option> [,...n] [FOR REPLICATION] AS {<sql_statement>[;][...n]|<method_specifier>}[;] <procedure_option> ::= [ENCRYPTION][RECOMPILE] EXECUTE_AS_Clause] <sql_statement> ::= {[BEGIN] statements [END]} <method_specifier> ::= EXTERNAL NAME assembly_name.class_name.method_name
8.1.1 使用模板创建存储过程
(1)在SQL Server 管理平台中,选择“视图(View)”菜单中的“模板资 源资源管理器(Template Explorer)”,出现“模板资源管理器(Template Explorer)”窗口,选择“存储过程”中的“创建存储过程”选项,如图8-1所 示。 (2)在文本框中可以输入创建存储过程的Transact_SQL语句,单击“执行” 按钮,即可创建该存储过程。
程序清单如下。 USE adventureworks GO /*创建一个存储过程,该存储过程包含姓名和Email地址信息*/ CREATE PROCEDURE proc_person AS SELECT firstname, lastname, emailaddress FROM person.contact ORDER BY lastname, firstname GO
8.1.2使用管理平台创建存储过程
例8-4下面的存储过程从表person.contact中返回指定的一些 员工姓名及其电话。该存储过程对传递的参数进行模式匹配。 如果没有提供参数,则使用预设的默认值(姓氏以字母D开 头)
程序清单如下。 USE AdventureWorks; GO CREATE PROCEDURE au_infor2 @lastname varchar(40) = 'D%', @firstname varchar(20) = '%' AS SELECT firstname, lastname, phone FROM person.contact WHERE firstname LIKE @firstname AND lastname LIKE @lastname GO
8.1.3 执行存储过程
•可以使用 Transact-SQL EXECUTE 语句来运行存储过程。存储 过程与函数不同,因为存储过程不返回取代其名称的值,也不能 直接在表达式中使用。 •执行存储过程必须具有执行存储过程的权限许可,才可以直接执 行存储过程,直接执行存储过程可以使用EXECUTE命令来执行, 语法形式如下: [[EXEC[UTE]] { [@return_status=] {procedure_name[;number]|@procedure_name_var} [[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]} [,...n] [ WITH RECOMPILE ]
8.1.2使用管理平台创建存储过程
例8-2 创建一个存储过程,以简化对sc表的数据添加工 作,使得在执行该存储过程时,其参数值作为数据添加 到表中。 程序清单如下: CREATE PROCEDURE [dbo].[ pr1_sc_ins] @Param1 char(10),@Param2 char(2),@Param3 real AS BEGIN insert into sc(sno,cno,score) values(@Param1,@Param2,@Param3) END
8.1.2使用管理平台创建存储过程
例8-3 创建一个带有参数的简单存储过程,从视图中返回指定 的雇员(提供名和姓)及其职务和部门名称,该存储过程接受 与传递的参数精确匹配的值
程序清单如下。 USE AdventureWorks; GO CREATE PROCEDURE GetEmployees @lastname varchar(40), @firstname varchar(20) AS SELECT LastName, FirstName, JobTitle, Department FROM HumanResources.vEmployeeDepartment WHERE FirstName = @firstname AND LastName = @lastname; GO
8.1 创建存储过程
在SQL Server中,可以使用两种方法创建存储过程: (1)使用创建存储过程模板创建存储过程; (2)利用SQL Server 管理平台创建存储过程。
当创建存储过程时,需要确定存储过程的三个组成部 分: (1)所有的输入参数以及传给调用者的输出参数。 (2)被执行的针对数据库的操作语句,包括调用其他 存储过程的语句。 (3)返回给调用者的状态值,以指明调用是成功还是 失败。
第8章 存储过程的操作与管理
存储过程概述
存储过程是为完成特定的功能而汇集在一起的一组SQL程序 语句,经编译后存储在数据库中的SQL程序。 在 SQL Server 中使用存储过程而不使用存储在客户端计算 机本地的 Transact-SQL 程序的优点包括: (1)存储过程已在服务器注册。 (2)存储过程具有安全特性(例如权限)和所有权链接,以及 可以附加到它们的证书。 (3)存储过程可以强制应用程序的安全性。 (4)存储过程允许模块化程序设计。 (5)存储过程是命名代码,允许延迟绑定。 (6)存储过程可以减少网络通信流量。
8.1.2使用管理平台创建存储过程
例8-5以下示例显示有一个输入参数和一个输出参数的存储过程。 存储过程中的第一个参数@sname将接收由调用程序指定的输入 值(学生姓名),第二个参数@sscore(成绩)将用于将该值返回调 用程序。SELECT 语句使用@sname参数获取正确的@sscore值, 并将该值分配给输出参数。 程序清单如下: CREATE PROCEDURE s_score @sname char(8),@sscore real output AS SELECT @sscore =score from sc join s on s.sno=sc.sno where sn=@sname GO
图8-2 新建存储过程
8.1.2使用管理平台创建存储过程
例8-1 创建一个带有SELECT语句的简单过程,该存储 过程返回所有员工姓名,Email地址,电话等。该存储过 程不使用任何参数 程序清单如下。 USE adventureworks GO CREATE PROCEDURE au_infor_all AS SELECT lastname, firstname, emailaddress, phone FROM person.contact GO
Байду номын сангаас 8.2.2 修改存储过程
例8-9 创建了一个名为proc_person 的存储过程,该存储过程包 含姓名和Email地址信息。然后,用ALTER PROCEDURE重新定 义了该存储过程,使之只包含姓名信息,并使用ENCRYPTION关 键字使之无法通过查看syscomments表来查看存储过程的内容。
例8-8 执行例8-3定义的存储过程GetEmployees 。 GetEmployees存储过程可以通过以下方法执行: EXECUTE(EXEC) GetEmployees 'Dull', 'Ann' 或者 EXECUTE(EXEC) GetEmployees @lastname = 'Dull', @firstname = 'Ann' 或者 EXECUTE(EXEC) GetEmployees @firstname = 'Ann', @lastname = 'Dull'