资源预览内容
第1页 / 共179页
第2页 / 共179页
第3页 / 共179页
第4页 / 共179页
第5页 / 共179页
第6页 / 共179页
第7页 / 共179页
第8页 / 共179页
第9页 / 共179页
第10页 / 共179页
亲,该文档总共179页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
SQL Server 2000数据数据库管理系管理系统 1关于关于 SQL Server SQL Server SQL Server 是一个是一个关系数据库关系数据库管理系统。管理系统。它最初是由它最初是由MicrosoftMicrosoft、SybaseSybase和和Ashton-TateAshton-Tate三三家公司联合开发的,于家公司联合开发的,于19881988年推出了第一个年推出了第一个OS/2OS/2版版本。本。后来,后来,Ashton-TateAshton-Tate公司退出了公司退出了SQL ServerSQL Server的开发。的开发。而在而在Windows NTWindows NT推出后,推出后,MicrosoftMicrosoft与与SybaseSybase在在SQL ServerSQL Server的开发上就分道扬镳了:的开发上就分道扬镳了:vMicrosoftMicrosoft将将SQL Server SQL Server 移植到移植到Windows NTWindows NT系统上,系统上,专注于开发推广专注于开发推广SQL ServerSQL Server的的Windows NTWindows NT版本;版本;vSybase Sybase 则较专注于则较专注于SQL ServerSQL Server在在UNIXUNIX操作系统上的操作系统上的应用。应用。我们介绍的是我们介绍的是Microsoft SQL ServerMicrosoft SQL Server。2SQL ServerSQL Server 2000 2000是是MicrosoftMicrosoft公司推出的公司推出的SQL SQL ServerServer数据库管理系统的一个重要版本。数据库管理系统的一个重要版本。该版本继承了该版本继承了SQL Server 4.0SQL Server 4.0版本的优点,同版本的优点,同时又比它增加了许多更先进的功能:时又比它增加了许多更先进的功能:v具有具有使用方便使用方便、可伸缩性好可伸缩性好与相关软件与相关软件集成程度高集成程度高等优点。等优点。v可跨越从运行可跨越从运行Microsoft Windows Microsoft Windows 9898的膝上型电脑的膝上型电脑到运行到运行Microsoft Windows Microsoft Windows 20002000的大型多处理器的服的大型多处理器的服务器等多种平台使用。务器等多种平台使用。SQL Server 2000SQL Server 2000包括包括4 4个常见版本:个常见版本:3(1 1)企业版()企业版(Enterprise EditionEnterprise Edition)q 支持所有的SQL Server 2000 特性,可作为大型Web 站点、企业OLTP(联机事务处理)以及数据仓库系统等的产品数据库服务器。(2 2)标准版()标准版(Standard EditionStandard Edition)q 用于小型的工作组或部门。(3 3)个人版()个人版(Personal EditionPersonal Edition)q 用于单机系统或客户机。(4 4)开发者版()开发者版(Developer EditionDeveloper Edition)q 用于程序员开发应用程序,这些程序需要SQL Server 2000 作为数据存储设备。v此外,此外,SQL Server 2000 SQL Server 2000 还有还有Desktop EngineDesktop Engine(桌(桌面引擎)和面引擎)和Windows CEWindows CE 版,用户可以根据实际情况选版,用户可以根据实际情况选择所要安装的择所要安装的SQL Server 2000 SQL Server 2000 版本。版本。44.14.1SQL Server 2000SQL Server 2000的新特性的新特性4.1.14.1.1数据库增强数据库增强1. 1. 支持扩展标示语言支持扩展标示语言XMLXML(Extensible Markup LanguageExtensible Markup Language)SQL Server 2000 SQL Server 2000 对对XML XML 的支持表现在以下几个方面:的支持表现在以下几个方面:q可以通过URL(Uniform Resource Locator)访问SQL Serverq支持XML-Data 模式q可检索编写XML 数据qSQL Server 2000 OLE DB 增加了对XML 文档的支持2. 2. 新的数据类型新的数据类型qSQL Server 2000 中增加了3 种新的数据类型:BIGINT、SQL_VARIANT和TABLE。3. 3. 数据行中的数据行中的TextText类型数据类型数据q SQL Server 2000 中可以将TEXT 和IMAGE 类型的数据直接存放到表的数据行中,而不是存放到不同的数据页中,这就减少了用于存储TEXT 和IMAGE 类型的空间并相应减少了磁盘处理这类数据的I/O 数量。54. 4. 用户自定义函数用户自定义函数q SQL Server 2000 扩展了Transact-SQL语言的可编程性,用户可以创建自己的Transact-SQL函数。用户自定义函数可以返回一个数量值或表。5. 5. 索引增强索引增强q 可以在计算列上创建索引,这是一个很大的改进。6. 6. 全文检索增强全文检索增强q 全文检索中增加了改变跟踪和图形过滤的功能,其中,图形过滤功能允许对存储在IMAGE类型列中的文档数据进行查询和创建索引。7. 7. 索引化视图索引化视图q 索引化视图允许在视图上创建索引,这就大大提高了需要频繁进行连接查询的程序的性能。8. 8. 分布式查询增强分布式查询增强q SQL Server 2000 引入了OPENROWSET()的函数,它可以指定在分布式查询中的一个特定的连接信息,分布式查询优化器的功能有了进一步的提高,授予了OLE DB 数据源更多的SQL 操作权。9. 9. 触发器类型触发器类型q 创建触发器时可以通过FOR 子句来指定触发器类型为INSTEAD OF 型或AFTER 型,不同类型的触发器执行的时机不同。610. 10. 级联参考完整性约束级联参考完整性约束q 级联参考完整性约束可以控制在删除或更新有外键约束的数据时所采取的操作,这种控制是通过在CREATE TABLE 或ALTER TABLE 命令中的REFERENCES 子句中加入ON DELETE 或ON UPDATE 子句来实现的。11. Collation 11. Collation 增进增进q SQL Server 2000 用Collation 来替代Code pages 和Sort Orders,它比以前的版本提供了更多对Collation 的支持,并引入了一个基于Windows Collations 的新的Collation集合,可以指定数据库级或列级的Collation。 74.1.24.1.2联合数据库服务器联合数据库服务器 SQL Server 2000 SQL Server 2000 支持分布式的分区视图,支持分布式的分区视图,可以跨越多个服务器水平地分割表。可以跨越多个服务器水平地分割表。1. 1. 多个多个SQL Server SQL Server 实例实例q SQL Server 2000 支持在同一计算机上同时运行多个关系数据库实例,每个实例有其独立的系统和用户数据库集合,应用程序采用与连接不同计算机上的SQL Server 实例大致相同的方式连接同一计算机上的各个实例。2. Failover 2. Failover 群集增强群集增强q 对Failover 群集的管理有了较大的改善,可以方便地安装、配置和管理一个SQL Server 2000的Failover 群集。3. 3. 网络库(网络库(Net-LibraryNet-Library)增强)增强q 简化了客户机配置并支持同一计算机上的多实例连接。4. Kerberos 4. Kerberos 和安全授权和安全授权q SQL Server 2000 使用Kerberos 来支持客户机和服务器之间相互的身份验证,使用Kerberos 和授权来支持复合认证以及SQL Server 注册。85. 5. 备份(备份(BackupBackup)和还原()和还原(RestoreRestore)增强)增强q SQL Server 2000 引入了一个更容易理解的模型来指定备份和还原的选项,同时还支持使用事务日志标识来还原工作到指定点或进行数据库的部分还原。6. 6. 对公用操作的可伸缩性增强对公用操作的可伸缩性增强q 增强的公用操作包括快速差异备份并行的数据库一致性校验和并行扫描。7. 7. 复制增强复制增强q SQL Server 2000 改进并增强了合并复制、快照复制和事务复制等功能,并在复制中增加了可变化的订阅功能,因而实施、监视和管理复制变得更加容易。8. 8. 数据转换服务增强数据转换服务增强(1 1)支持键和约束。)支持键和约束。(2 2)DTS DTS 支持键和约束可以使用数据导入导出向导支持键和约束可以使用数据导入导出向导从源表向目标表移动主键、外键和约束。从源表向目标表移动主键、外键和约束。9(3 3)新的定制任务)新的定制任务q SQL Server 2000 DTS Designer 和DTS 对象模型提供了新的自定义任务功能从而可以创建执行任务的包或设置基于实时环境属性的变量,包括从或向Internet 以及FTP 站点导入数据、发送数据、以异步方式运行包、创建互相发送消息的包、创建执行其它包的包以及在同一事务中包含多个包执行。(4 4)将)将DTS DTS 包保存在包保存在VB VB 文件中文件中q 将DTS 包保存到Microsoft Visual Basic 文件中,可以允许将通过DTS 导入向导、DTS导出向导或DTS Designer 创建的包与Visual Basic 程序结合在一起或被需要引用DTS 对象模型组件的Visual Basic 开发者用作原型。9. SQL Server Analysis Services9. SQL Server Analysis Servicesq SQL Server 4.0 中的OLAP(Online Analytical Processing)服务转变为SQL Server 2000 中的分析服务(Analysis Services),分析服务还包括了新的数据挖掘功能。10. SQL Server Meta Data Services10. SQL Server Meta Data Servicesq SQL Server 4.0 中的贮藏室(Repository)部分在SQL Server 2000 中转化为元数据服务(Meta Data Services)。104.2SQL Server 2000的主要的主要组件件 SQL Server 2000 SQL Server 2000 提供了一整套的提供了一整套的管理工具管理工具和和实用程序实用程序,使用这些工具和程序,可以设置和管理使用这些工具和程序,可以设置和管理SQL Server SQL Server 进行数据进行数据库管理和备份,并保证数据的安全和一致。库管理和备份,并保证数据的安全和一致。下面,对这些组件做一个简单的介绍。下面,对这些组件做一个简单的介绍。1企业管理器(企业管理器(EnterpriseManager)q企业管理器是SQL Server 中最重要的管理工具,在使用SQL Server的过程中大部分的时间都是和它打交道。q通过企业管理器可以管理所有的数据库系统工作和服务器工作,也可以调用其它的管理开发工具。2查询分析器(查询分析器(QueryAnalyzer)q查询分析器用于执行Transaction-SQL 命令等SQL 脚本程序,以查询分析或处理数据库中的数据,这是一个非常实用的工具,对掌握SQL 语言、理解SQL Server 的工作有很大帮助。q使用查询分析器的熟练程度是衡量一个SQL Server 用户水平的标准。 113服务管理器(服务管理器(ServiceManager)q服务管理器用于启动、暂停或停止SQL Server 的4种服务:、DTC(Distributed Transaction Coordinator 分布式事务协调器)MSSQL Server OLAP serviceSQL ServerSQL Server Agent4客户端网络实用工具(客户端网络实用工具(ClientNetworkUtility)q客户端网络实用工具用于配置客户端的连接、测定网络库的版本信息以及设定本地数据库的相关选项。5服务器网络实用工具(服务器网络实用工具(ServerNetworkUtility)q服务器网络实用工具用于配置服务器端的连接、测定网络库的版本信息。6导入和导出数据(导入和导出数据(ImportandExportData)q导入和导出数据采用 DTS Import/Export 向导来完成,此向导包含了所有的DTS(Data Transformation Services 数据转换服务)工具提供了在OLE DB数据源之间复制数据的最简捷的方法。 127.在在IIS中中配配置置SQLXML支支持持(ConfigureSQLXMLSupportinIIS)qIIS(Internet Information Services 因特网信息服务),此工具可以在运行IIS的计算机上定义、注册虚拟目录,并在虚拟目录和SQL Server 实例之间创建关联。8事件探查器(事件探查器(Profiler)q事件探查器的功能是监视SQL Server 数据库系统引擎事件,主要用于监听SQL Server 系统的运行性能。9联机丛书(联机丛书(BooksOnline)qSQL Server 2000 提供了大量的联机文档,用户可以便捷地查询到许多很有价值的信息。q一个优秀的SQL Server 管理员必然是使用联机文档的高手。v另另外外,在在安安装装SQL SQL Server Server 2000 2000 的的同同时时,安安装装了了SQL SQL ServerServer的升级向导的升级向导q在“开始”菜单的“程序”项中,将鼠标移到“Microsoft SQL Server版本切换”上即可看到SQL Server 升级向导。qSQL Server 升级向导用于将一个6.5 版本的SQL Server 的设置和数据库复制升级到本机上安装的SQL Server 2000 中。 134.34.3Transact-SQLTransact-SQL程序设计程序设计在在Transact-SQL Transact-SQL 语言中标准的语言中标准的SQL SQL 语句畅通语句畅通无阻。无阻。Transact-SQL Transact-SQL 也有类似于也有类似于SQL SQL 语言的分类不语言的分类不过做了许多扩充。过做了许多扩充。在第在第3 3章中,我们曾介绍了标准章中,我们曾介绍了标准SQLSQL语言的语法语言的语法及其基本使用方法,在此只介绍及其基本使用方法,在此只介绍Transact-SQL Transact-SQL 语言中的其它部分。语言中的其它部分。4.3.14.3.1变量变量 4.3.24.3.2流程控制命令流程控制命令 4.3.34.3.3其它命令其它命令 4.3.44.3.4常用函数常用函数 144.3.1变量变量Transact-SQL Transact-SQL 中可以使用两种变量:中可以使用两种变量:局部变量局部变量和和全局变量全局变量。1局部变量局部变量v局部变量是用户可自定义的变量,它的作用范围仅在程序内部。局部变量是用户可自定义的变量,它的作用范围仅在程序内部。v在程序中通常用来储存从表中查询到的数据,或当作程序执行在程序中通常用来储存从表中查询到的数据,或当作程序执行过程中暂存变量使用。过程中暂存变量使用。v局部变量必须以局部变量必须以 开头,而且必须先用开头,而且必须先用DECLAREDECLARE 命令说明后才命令说明后才可使用。其说明形式如下:可使用。其说明形式如下: DECLARE 变量名 变量类型,变量名变量类型v在在Transact-SQL Transact-SQL 中不能像在一般的程序语言中一样使用中不能像在一般的程序语言中一样使用“变量变量= =变量值变量值”来给变量赋值,必须使用来给变量赋值,必须使用SELECTSELECT 或或SET SET 命令来设定变命令来设定变量的值。其语法如下:量的值。其语法如下:SELECT 局部变量= 变量值SET 局部变量量= 变量值【例例】声明一个长度为声明一个长度为 8 8 个字符的变量个字符的变量idid,并赋值。,并赋值。 declare id char(8)select id =152全局变量全局变量v全局变量是全局变量是SQL Server SQL Server 系统内部使用系统内部使用的变量,其作用范围并不的变量,其作用范围并不局限于某一程序,而是任何程序均可随时调用。局限于某一程序,而是任何程序均可随时调用。v全局变量通常存储一些全局变量通常存储一些SQL Server SQL Server 的配置设定值和效能统计数的配置设定值和效能统计数据。用户可在程序中用全局变量来测试系统的设定值或据。用户可在程序中用全局变量来测试系统的设定值或Transact-SQL Transact-SQL 命令执行后的状态值。命令执行后的状态值。v全局变量不是由用户的程序定义的,它们是在服务器级定义的,全局变量不是由用户的程序定义的,它们是在服务器级定义的,只能使用预先说明及定义的全局变量。只能使用预先说明及定义的全局变量。v引用全局变量时必须以引用全局变量时必须以“”开头。开头。v局部变量的名称不能与全局变量的名称相同,否则会在应用中局部变量的名称不能与全局变量的名称相同,否则会在应用中出错。出错。3注释符注释符在在Transact-SQL Transact-SQL 中可使用两类注释符:中可使用两类注释符:1 1ANSI ANSI 标准的注释符标准的注释符“-”用于用于单行单行注释。注释。2 2与与C C 语言相同的程序注释符号,即语言相同的程序注释符号,即“/*/*/*/”,/* /* 用用于注释文字的开头,于注释文字的开头,* */ /用于注释文字的结尾,可在程序中标识用于注释文字的结尾,可在程序中标识多多行行文字为注释。文字为注释。164.3.2流程控制命令流程控制命令Transact-SQL Transact-SQL 语言使用的流程控制命令与常见的程语言使用的流程控制命令与常见的程序设计语言类似,主要有以下几种控制命令。序设计语言类似,主要有以下几种控制命令。4.3.2.14.3.2.1BEGINBEGINENDEND其语法如下:其语法如下:BEGINBEGIN ENDENDBEGINBEGINEND END 用来设定一个用来设定一个程序块程序块,将在,将在BEGINBEGINEND END 内的所有程序视为一个单元执行。内的所有程序视为一个单元执行。BEGINBEGINEND END 经常在经常在条件语句条件语句(如(如IFIFELSEELSE)中使用。)中使用。在在BEGINBEGINEND END 中可中可嵌套嵌套另外的另外的BEGINBEGINEND END 来定义另来定义另一程序块。一程序块。174.3.2.24.3.2.2IF IF ELSE ELSE其语法如下:其语法如下:IF IF ELSE ELSE 条件表达式式条件表达式式 其中其中: :v 可以是各种表达式的组合,但表达式的值可以是各种表达式的组合,但表达式的值必须是逻辑值必须是逻辑值“真真”或或“假假”。vELSE ELSE 子句是可选的,最简单的子句是可选的,最简单的IF IF 语句没有语句没有ELSE ELSE 子句部子句部分。分。vIFIFELSE ELSE 用来判断当某一条件成立时执行某段程序,条用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。件不成立时执行另一段程序。v如果不使用程序块,如果不使用程序块,IF IF 或或ELSE ELSE 只能执行一条命令。只能执行一条命令。vIF ELSE IF ELSE 可以进行嵌套,在可以进行嵌套,在Transact-SQL Transact-SQL 中最多可嵌套中最多可嵌套32 32 级。级。18【例例】从从SCSC数据表中求出学号为数据表中求出学号为S1S1同学的平均同学的平均成绩,如果此平均成绩大于或等于成绩,如果此平均成绩大于或等于6060分,则输出分,则输出“passpass”信息。信息。if if ( (select avgselect avg(score) (score) fromfrom sc sc wherewhere sno=S1 sno=S1 group bygroup by sno)=60 sno)=60 beginbegin printprint pass pass endend194.3.2.34.3.2.3CASECASECASE CASE 命令有两种语句格式:命令有两种语句格式:格式格式1 1:CASE CASE WHEN WHEN THEN THEN WHEN WHEN THEN THEN ELSE ELSE ENDEND该语句的执行过程是:该语句的执行过程是:v将将CASECASE后面表达式的值与各后面表达式的值与各WHENWHEN子句中的表达式的值进行比较,子句中的表达式的值进行比较,v如果二者相等,则返回如果二者相等,则返回THENTHEN后的表达式的值,然后跳出后的表达式的值,然后跳出CASECASE语语句,否则返回句,否则返回ELSEELSE子句中的表达式的值。子句中的表达式的值。vELSEELSE子句是可选项。当子句是可选项。当CASECASE语句中不包含语句中不包含ELSEELSE子句时,如果所子句时,如果所有比较失败时,有比较失败时,CASECASE语句将返回语句将返回NULLNULL。20【例例】从学生表从学生表S S中,选取中,选取SNOSNO,SEXSEX,如果,如果SEXSEX为为“男男”则输出则输出“M M”,如果为,如果为“女女”输出输出“F F”。SELECT SNO,SELECT SNO, SEX= SEX= CASECASE sex sex WHEN WHEN 男男 THEN M THEN M WHEN WHEN 女女 THEN F THEN F END ENDFROM SFROM S21格式格式2 2:CASECASEWHEN WHEN THEN THEN WHEN WHEN THEN THEN ELSE ELSE ENDEND该语句的执行过程是:该语句的执行过程是:v首先测试首先测试WHENWHEN后的表达式的值后的表达式的值v如果其值为真,则返回如果其值为真,则返回THENTHEN后面的表达式的值,否后面的表达式的值,否则测试下一个则测试下一个WHENWHEN子句中的表达式的值子句中的表达式的值v如果所有如果所有WHENWHEN子句后的表达式的值都为假,则返回子句后的表达式的值都为假,则返回ELSEELSE后的表达式的值后的表达式的值v如果在如果在CASECASE语句中没有语句中没有ELSEELSE子句,则子句,则CASECASE表达式返表达式返回回NULLNULL。22注:注:CASE CASE 命令可以嵌套到命令可以嵌套到SQL SQL 命令中。命令中。【例例】从从SCSC表中查询所有同学选课成绩情况,凡成绩表中查询所有同学选课成绩情况,凡成绩为空者输出为空者输出“未考未考”、小于、小于6060分输出分输出“不及格不及格”、6060分分至至7070分输出分输出“及格及格”、7070分至分至9090分输出分输出“良好良好”、大于、大于或等于或等于9090分时输出分时输出“优秀优秀”。SELECT SNO,CNO, SELECT SNO,CNO, SCORE= SCORE= CASE CASE WHEN SCORE IS NULL THEN WHEN SCORE IS NULL THEN 未考未考 WHEN SCORE60 THEN WHEN SCORE=60 AND SCORE=60 AND SCORE=70 AND SCORE=70 AND SCORE=90 THEN WHEN SCORE=90 THEN 优秀优秀 END ENDFROM SCFROM SC234.3.2.44.3.2.4WHILEWHILECONTINUECONTINUEBREAKBREAK其语法如下:其语法如下:WHILE WHILE BEGINBEGIN BREAKBREAKCONTINUECONTINUE 命令行或程序块命令行或程序块 ENDENDWHILE WHILE 命令在设定的条件成立时,会重复执行命令行命令在设定的条件成立时,会重复执行命令行或程序块。或程序块。CONTINUE CONTINUE 命令可以让程序跳过命令可以让程序跳过CONTINUE CONTINUE 命令之后的命令之后的语句,回到语句,回到WHILE WHILE 循环的第一行,继续进行下一次循环。循环的第一行,继续进行下一次循环。BREAK BREAK 命令则让程序完全跳出循环,结束命令则让程序完全跳出循环,结束WHILE WHILE 命令命令的执行。的执行。WHILE WHILE 语句也可以嵌套。语句也可以嵌套。24如:如:以下程序计算以下程序计算1 1100100之间所有能被之间所有能被3 3整除的数的整除的数的个数及总和。个数及总和。DECLARE S SMALLINT,I SMALLINT,NUMS SMALLINT DECLARE S SMALLINT,I SMALLINT,NUMS SMALLINT SET S=0SET S=0SET I=1SET I=1SET NUMS=0SET NUMS=0WHILEWHILE (I=100) (I=100) BEGIN BEGIN IF (I%3=0) IF (I%3=0) BEGINBEGIN SET S=S+I SET S=S+I SET NUMS=NUMS+1 SET NUMS=NUMS+1 ENDEND SET I=I+1 SET I=I+1 END ENDPRINT SPRINT SPRINT NUMSPRINT NUMS254.3.2.54.3.2.5WAITFORWAITFOR其语法如下:其语法如下:WAITFOR DELAY WAITFOR DELAY | TIME | TIME | ERROREXIT | PROCESSEXIT | MIRROREXIT| ERROREXIT | PROCESSEXIT | MIRROREXITWAITFOR WAITFOR 命令用来暂时停止程序执行,直到所设定的命令用来暂时停止程序执行,直到所设定的等待时间已过或所设定的时间已到才继续往下执行。等待时间已过或所设定的时间已到才继续往下执行。其中其中时间时间必须为必须为DATETIMEDATETIME 类型的数据,但不能类型的数据,但不能包括日期。包括日期。各关键字含义如下:各关键字含义如下:1 1DELAYDELAY:用来设定等待的时间,最多可达用来设定等待的时间,最多可达24 24 小时小时2 2TIMETIME:用来设定等待结束的时间点用来设定等待结束的时间点3 3ERROREXITERROREXIT:直到处理非正常中断直到处理非正常中断4 4PROCESSEXITPROCESSEXIT:直到处理正常或非正常中断直到处理正常或非正常中断5 5MIRROREXIMIRROREXI: 直到镜像设备失败直到镜像设备失败26【例例】等待等待1 1 小时小时2 2 分零分零3 3 秒后才执行秒后才执行SELECT SELECT 语句。语句。waitfor waitfor delaydelay 01:02:0301:02:03select * from employeeselect * from employee274.3.2.64.3.2.6GOTOGOTO语法如下:语法如下:GOTO GOTO 标识符标识符GOTO GOTO 命令用来改变程序执行的流程,使程序命令用来改变程序执行的流程,使程序跳到标有标识符的指定的程序行再继续往下执行。跳到标有标识符的指定的程序行再继续往下执行。作为跳转目标的标识符可为数字与字符的组合。作为跳转目标的标识符可为数字与字符的组合。但必须以但必须以“:”结尾。结尾。在在GOTO GOTO 命令行,标识符后不必跟命令行,标识符后不必跟“:”28如:如:求求1 12 23 31010的总和。的总和。DECLARE S SMALLINT,I SMALLINTDECLARE S SMALLINT,I SMALLINTSET I=1SET I=1SET S=0SET S=0BEG:BEG:IF (I=10)IF (I=表达式的最小整数FLOOR 返回=表达式的最小整数ROUND 取整数,小数的第一位上四舍五入符号函数ABS 返回表达式的绝对值SIGN 测试参数的正负号,返回0、1或-1,其它函数PI 返回值为,即3.14936RAND 求0-1间的随机浮点数表表4 4. .1 1 T Tr ra an ns sa ac ct t- -S SQ QL L 的的算算术术函函数数 434.3.4.34.3.4.3字符串函数字符串函数字符串函数对字符串函数对二进制数据二进制数据、字符串字符串和和表达式表达式执行不同执行不同的运算。的运算。此类函数作用于此类函数作用于CHARCHAR、VARCHARVARCHAR、BINARYBINARY 和和VARBINARYVARBINARY 数据类型以及可以隐式转换为数据类型以及可以隐式转换为CHAR CHAR 或或VARCHARVARCHAR的数据类型。的数据类型。可以在可以在SELECT SELECT 语句的语句的SELECT SELECT 和和WHERE WHERE 子句以及表达子句以及表达式中使用字符串函数。式中使用字符串函数。常用的字符串函数有:常用的字符串函数有:1 1字符转换函数字符转换函数(1 1)ASCIIASCII()()q ASCII()函数返回字符表达式最左端字符的ASCII 码值。v在在ASCII ASCII 函数中,纯数字的字符串可不用函数中,纯数字的字符串可不用“”括起来,但括起来,但含其它字符的字符串必须用含其它字符的字符串必须用“”括起来使用,否则会出错。括起来使用,否则会出错。44(2 2)CHARCHAR()()q CHAR()函数用于将ASCII 码转换为字符。q如果没有输入0 255 之间的ASCII 码值,CHAR()函数会返回一个NULL 值。(3 3)LOWERLOWER()()q LOWER()函数把字符串全部转换为小写。(4 4)UPPERUPPER()()q UPPER()函数把字符串全部转换为大写。(5 5)STRSTR()()q STR()函数把数值型数据转换为字符型数据。其语法如下:其语法如下:STR( length )q自变量length 和decimal 必须是非负值。qlength 指定返回的字符串的长度。qdecimal 指定返回的小数位数。q如果没有指定长度,缺省的length 值为10 ,decimal 缺省值为0 。q小数位数大于decimal 值时,STR()函数将其下一位四舍五入。q指定长度应大于或等于数字的符号位数+小数点前的位数+小数点位数+小数点后的位数。q如果小数点前的位数超过了指定的长度,则返回指定长度的*。452 2去空格函数去空格函数(1 1)LTRIMLTRIM()()q LTRIM()函数把字符串头部的空格去掉。(2 2)RTRIMRTRIM()()q RTRIM()函数把字符串尾部的空格去掉。v在许多情况下,往往需要得到头部和尾部都没有空在许多情况下,往往需要得到头部和尾部都没有空格字符的字符串,这时可将上两个函数嵌套使用。格字符的字符串,这时可将上两个函数嵌套使用。463 3取子串函数取子串函数(1 1)LEFTLEFT()()q LEFT()函数返回部分字符串。其语法如下:LEFTLEFT(,)q LEFT()函数返回的子串是从字符串最左边起到第integer_expression 个字符的部分。q若integer_expression 为负值,则返回NULL 值。(2 2)RIGHTRIGHT()()q RIGHT()函数返回部分字符串。其语法如下:RIGHTRIGHT(,)q RIGHT()函数返回的子串是从字符串右边第integer_expression 个字符起到最后一个字符的部分。q若integer_expression 为负值,则返回NULL 值。(3 3)SUBSTRINGSUBSTRINGqSUBSTRING()函数返回部分字符串。其语法如下:SUBSTRING ( , SUBSTRING ( , length)length)q SUBSTRING()函数返回的子串是从字符串左边第starting_ position 个字符起length个字符的部分。q其中表达式可以是字符串或二进制串或含字段名的表达式。qSUBSTRING()函数不能用于TEXT 和IMAGE 数据类型。 474 4字符串比较函数字符串比较函数(1 1)CHARINDEXCHARINDEX()()q CHARINDEX()函数返回字符串中某个指定的子串出现的开始位置。其语法如下:CHARINDEX CHARINDEX ( ,)q 其中,substring _expression 是所要查找的字符表达式,qexpression 可为字符串也可为列名表达式。q如果没有发现子串,则返回0 值。q此函数不能用于TEXT 和IMAGE 数据类型。(2 2)PATINDEXPATINDEX()()q PATINDEX()函数返回字符串中某个指定的子串出现的开始位置。其语法如下:PATINDEX PATINDEX ( ,column_ name)q 其中子串表达式前后必须有百分号“%” ,否则返回值为0。q与CHARINDEX()函数不同的是,PATINDEX()函数的子串中可以使用通配符,且此函数可用于CHAR、VARCHAR和TEXT 数据类型。 48(3 3)SOUNDEXSOUNDEX()()q SOUNDEX()函数返回一个四位字符码。其语法如下:SOUNDEX SOUNDEX ()q SOUNDEX()函数将character _expression 转换为4 个字符的声音码。q其中第一个码为原字符串的第一个字符,第二到第四个字符则为数字,是该字符串的声音字母所对应的数字,但是忽略了除首字母外的串中的所有元音字母。qSOUNDEX()函数可用来查找声音相似的字符串。q但SOUNDEX()函数对数字和汉字均只返回0 值。49(4 4)DIFFERENCEDIFFERENCE()()q DIFFERENCE()函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异。其语法如下:DIFFERENCE DIFFERENCE (,)q 值的差异是用0、1、2、3、4 来表示的,含义如下:0 两个SOUNDEX()函数返回值的第一个字符不同1 两个SOUNDEX()函数返回值的第一个字符相同2 两个SOUNDEX()函数返回值的第一、二个字符相同3 两个SOUNDEX()函数返回值的第一、二、三个字符相同4 两个SOUNDEX()函数返回值完全相同 505 5字符串操作函数字符串操作函数(1 1)QUOTENAMEQUOTENAME()()q QUOTENAME()函数返回被特定字符括起来的字符串。其语法如下:QUOTENAME QUOTENAME ( ,quote_ quote_ charactercharacter)q 其中,quote_ character 标明括字符串所用的字符,如“”、“(”、“”等,缺省值为“ ”。(2 2)REPLICATEREPLICATE()()q REPLICATE()函数返回一个重复character_expression 指定次数的字符串。其语法如下:REPLICATE REPLICATE (character_expressioncharacter_expression,integer_expressioninteger_expression)q 如果integer_expression 值为负值,则REPLICATE 函数返回NULL 串。(3 3)REVERSEREVERSE()()q REVERSE()函数将指定的字符串的字符排列顺序颠倒。其语法如下:REVERSE REVERSE ()q 其中,character_expression 可以是字符串常数或一个列的值。 51(4 4)REPLACEREPLACE()()qREPLACE()函数返回被替换了指定子串的字符串。其语法如下:REPLACE REPLACE (,)qREPLACE()函数用string_expression3 替换在string_expression1 中的子串string_expression2。(5 5)SPACESPACE()()qSPACE()函数返回一个有指定长度的空白字符串。其语法如下:SPACE SPACE ()q如果integer_expression 值为负值,则SPACE 函数返回NULL 串。 52(6 6)STUFFSTUFF()()q STUFF()函数用另一子串替换字符串指定位置长度的子串。其语法如下:STUFFSTUFF(,start_ position,)q 如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则STUFF()函数返回NULL 值。q如果length 长度大于character_expression1 的长度,则character_expression1 只保留首字符。 534.3.4.44.3.4.4数据类型转换函数数据类型转换函数在一般情况下,在一般情况下,SQL Server SQL Server 会自动完成数据类型的会自动完成数据类型的转换。转换。例如,例如,可以直接将字符数据类型或表达式与可以直接将字符数据类型或表达式与DATATIME DATATIME 数据类型或表达式比较;当表达式中用了数据类型或表达式比较;当表达式中用了INTEGERINTEGER、SMALLINTSMALLINT或或TINYINT TINYINT 时,时,SQL Server SQL Server 也可将也可将INTEGER INTEGER 数数据类型或表达式转换为据类型或表达式转换为SMALLINTSMALLINT数据类型或表达式,这数据类型或表达式,这称为称为隐式转换隐式转换。如果不能确定如果不能确定SQL Server SQL Server 是否能完成隐式转换或者是否能完成隐式转换或者使用了不能隐式转换的其它数据类型,就需要使用数据使用了不能隐式转换的其它数据类型,就需要使用数据类型转换函数做显式转换了。类型转换函数做显式转换了。此类函数有两个:此类函数有两个:1 1CASTCAST()()q CAST()函数语法如下:CAST CAST ( AS length AS length )542 2CONVERTCONVERT()()q CONVERT 函数语法如下:CONVERT CONVERT ( length length , ,stylestyle)q data_ type 为SQL Server 系统定义的数据类型,用户自定义的数据类型不能在此使用。qlength 用于指定数据的长度缺省值为30。q把CHAR 或VARCHAR 类型转换为诸如INT 或SAMLLINT 这样的INTEGER 类型,结果必须是带正号(+)或负号(-)的数值。qTEXT 类型到CHAR 或VARCHAR 类型的转换最多为8000 个字符,即CHAR 或VARCHAR数据类型是最大长度。qIMAGE 类型存储的数据转换到BINARY 或VARBINARY 类型,最多为8000 个字符。q把整数值转换为MONEY 或SMALLMONEY 类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。qBIT 类型的转换把非零值转换为1,并仍以BIT 类型存储。q试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。q用CONVERT()函数的style 选项能以不同的格式显示日期和时间。qstyle 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式,如表4.2所示。 55表表4.2 DATATIME 4.2 DATATIME 和和SMALLDATETIME SMALLDATETIME 类型数据的转换格式类型数据的转换格式style1 style2 style1 style2 标准标准 输出格式输出格式 0 或100 缺省 mon dd yyyy hh:mi Am/Pm1 101 USA mm/dd/yy2 102 ANSI yy.mm.dd3 103 UK/French dd/mm/yy4 104 German dd.mm.yy5 105 Italian dd-mm-yy6 106 dd mon yy7 107 mon dd yy8 108 hh:mi:ss9 109 mon dd yyyy hh:mi:sss Am/Pm10 110 USA mm=dd-yy11 111 Japan yy/mm/dd12 112 ISO yymmdd13 113 Europe dd mon yyyy hh:mi:ss:mmm(24h)14 114 hh:mi:ss:mmm(24h)20 120 ODBC1 yyyy-mm-dd hh:mi:ss(24h)21 121 ODBC2 yyyy-mm-dd hh:mi:ss:mmm(24h)564.3.4.54.3.4.5日期函数日期函数日期函数用来操作日期函数用来操作DATETIME DATETIME 和和SMALLDATETIME SMALLDATETIME 类型类型的数据,执行算术运算。的数据,执行算术运算。与其它函数一样,可以在与其它函数一样,可以在SELECT SELECT 语句的语句的SELECT SELECT 和和WHERE WHERE 子句以及表达式中使用日期函数。子句以及表达式中使用日期函数。1 1DAYDAY()vDAYDAY()函数返回()函数返回date_expression date_expression 中的日期值。中的日期值。2 2MONTHMONTH()vMONTHMONTH()函数返回()函数返回date_expression date_expression 中的月份值。中的月份值。v与与DAYDAY()函数不同的是,()函数不同的是,MONTHMONTH()函数的参数为整数时,一()函数的参数为整数时,一律返回整数值律返回整数值1 1,即,即SQL Server SQL Server 认为其是认为其是1900 1900 年年1 1 月。月。3 3YEARYEAR()vYEARYEAR()函数返回()函数返回date_expression date_expression 中的年份值。中的年份值。在使用日期函数时,其日期值应在在使用日期函数时,其日期值应在1753 1753 年到年到9999 9999 年年之间,这是之间,这是SQL Server SQL Server 系统所能识别的日期范围,否则系统所能识别的日期范围,否则会出现错误。会出现错误。574 4DATEADDDATEADD()()DATEADDDATEADD()函数语法如下:()函数语法如下:DATEADD( )vDATEADDDATEADD()函数返回指定日期()函数返回指定日期date date 加上指定的额加上指定的额外日期间隔外日期间隔number number 产生的新日期。产生的新日期。v参数参数“datepartdatepart”在日期函数中经常被使用,它用在日期函数中经常被使用,它用来指定构成日期类型数据的各组件,如年、季、月、来指定构成日期类型数据的各组件,如年、季、月、日、星期等。其取值如表日、星期等。其取值如表4.34.3所示。所示。58表表4.3 4.3 日期函数中日期函数中datepart datepart 参数的取值参数的取值datepart datepart 缩写缩写 取值取值year yy,yyyy 1753 9999quarter qq,q 1 4month mm,m 1 12day of year dy,y 1 366day dd,d 1 31week wk,ww 1 54weekday dw 1 7hour hh 0 23minute mi,n 0 59second ss,s 0 59millisecond ms 0 999595 5DATEDIFFDATEDIFF()()DATEDIFFDATEDIFF()函数语法如下:()函数语法如下:DATEDIFF(,)vDATEDIFFDATEDIFF()函数返回两个指定日期在()函数返回两个指定日期在datepart datepart 方方面的不同之处,即面的不同之处,即date2 date2 超过超过date1date1的差距值,其结果的差距值,其结果值是一个带有正负号的整数值针。值是一个带有正负号的整数值针。v对不同的对不同的datepartdatepart,DATEDIFFDATEDIFF()函数所允许的最()函数所允许的最大差距值不一样,如:大差距值不一样,如:qdatepart 为second 时DATEDIFF 函数所允许的最大差距值为68 年;qdatepart 为millisecond 时,DATEDIFF() 函数所允许的最大差距值为24 天20 小时30 分23 秒647 毫秒。 606 6DATENAMEDATENAME()()DATENAMEDATENAME()函数语法如下:()函数语法如下:DATENAME(,)vDATENAMEDATENAME()函数以字符串的形式返回日期的指定()函数以字符串的形式返回日期的指定部分此部分,由部分此部分,由datepart datepart 来指定。来指定。7.DATEPART7.DATEPART()()DATEPARTDATEPART()函数语法如下:()函数语法如下:DATEPART(,)vDATEPARTDATEPART()函数以整数值的形式返回日期的指定()函数以整数值的形式返回日期的指定部分,此部分由部分,此部分由datepart datepart 来指定。来指定。vDATEPARTDATEPART(dddd,datedate)等同于)等同于DAYDAY(datedate)vDATEPARTDATEPART(mmmm,datedate)等同于)等同于MONTHMONTH(datedate)vDATEPARTDATEPART(yyyy,datedate)等同于)等同于YEARYEAR(datedate)618 8GETDATEGETDATE()()GETDATEGETDATE()函数语法如下:()函数语法如下:GETDATE()vGETDATEGETDATE()函数以()函数以DATETIME DATETIME 的缺省格式返回系统的缺省格式返回系统当前的日期和时间,它常作为其它函数或命令的参数当前的日期和时间,它常作为其它函数或命令的参数使用。使用。624.3.4.64.3.4.6TEXT TEXT 和和IMAGE IMAGE 函数函数1 1TEXTPTRTEXTPTR()()TEXTPTRTEXTPTR()函数语法如下:()函数语法如下:TEXTPTR()vTEXTPTRTEXTPTR()函数返回一个指向存储文本的第一个数据库页的指()函数返回一个指向存储文本的第一个数据库页的指针。针。v其返回值是一个其返回值是一个VARBINARYVARBINARY(1616)类型的二进制字符串。)类型的二进制字符串。v如果数据类型为如果数据类型为TEXTTEXT、NTEXTNTEXT或或IMAGEIMAGE的列没有赋予初值,则的列没有赋予初值,则TEXTPTRTEXTPTR()函数返回一个()函数返回一个NULL NULL 指针。指针。2 2TEXTVALIDTEXTVALID()()TEXTVALIDTEXTVALID()函数语法如下:()函数语法如下:TEXTVALID(,)vTEXTVALIDTEXTVALID()函数用于检查指定的文本指针是否有效。()函数用于检查指定的文本指针是否有效。v如果有效,则返回如果有效,则返回1 1;无效则返回;无效则返回0 0。v如果列未赋予初值,则返回如果列未赋予初值,则返回NULL NULL 值。值。634.3.4.74.3.4.7用户自定义函数用户自定义函数v从从SQLServer2000开始,用户可以自定义函数了在开始,用户可以自定义函数了在SQLServer2000中用户自定义函数是作为一个中用户自定义函数是作为一个数据库数据库对象对象来管理的。来管理的。v可以使用企业管理器或可以使用企业管理器或Transact-SQL命令来创建、命令来创建、修改、删除。修改、删除。644.44.4企业管理器企业管理器(EnterpriseManager)企业管理器的界面是一个标准的企业管理器的界面是一个标准的WindowsWindows界面,界面,由标题栏、菜单栏、工具栏、树窗口和任务对象由标题栏、菜单栏、工具栏、树窗口和任务对象窗口板(又称任务板)组成。窗口板(又称任务板)组成。企业管理器的菜单栏分为两层:企业管理器的菜单栏分为两层:v上一层是主菜单栏,下一层是控制台菜单栏。上一层是主菜单栏,下一层是控制台菜单栏。v主菜单栏主菜单栏在程序运行的过程中是基本保持不变的。在程序运行的过程中是基本保持不变的。v控制台菜单栏控制台菜单栏中的菜单则是动态的,随着所进行操中的菜单则是动态的,随着所进行操作的不同而显示不同的菜单内容。作的不同而显示不同的菜单内容。企业管理器的企业管理器的工具栏工具栏也是动态的,会随着所进也是动态的,会随着所进行操作的不同而增加或减少图标。行操作的不同而增加或减少图标。65在在Enterprise Manager Enterprise Manager 中提供了工具可以帮助用户中提供了工具可以帮助用户产生对象的产生对象的SQL SQL 语言脚本。语言脚本。生成对象的生成对象的SQL SQL 脚本脚本方法如下:方法如下:1.1.在在Enterprise Manager Enterprise Manager 中选择要生成中选择要生成SQL SQL 脚本的对象,单击右脚本的对象,单击右键,从快捷菜单中的键,从快捷菜单中的“所有任务所有任务”子菜单中选择子菜单中选择“生成生成SQLSQL脚本脚本”菜单项。菜单项。2.2.在在“生成生成SQLSQL脚本脚本”对话框中设置选项后,单击对话框中设置选项后,单击“预览预览”按钮将按钮将会弹出会弹出“生成生成SQLSQL脚本预览脚本预览”对话框,可以点击对话框,可以点击“复制复制”按钮即按钮即可将脚本语句复制到剪贴板中;也可选择可将脚本语句复制到剪贴板中;也可选择“确定确定”按钮并指定脚按钮并指定脚本文件名和存放位置。本文件名和存放位置。由由Enterprise Manager Enterprise Manager 产生的产生的SQL SQL 脚本是一个后缀脚本是一个后缀名为名为.sql.sql 的文件,它实际上是一个文本文件(的文件,它实际上是一个文本文件(Text Text FileFile),可以在),可以在Enterprise Manager Enterprise Manager 或其它文件编辑器或其它文件编辑器中浏览或修改。中浏览或修改。必要时可以生成所有数据库对象的必要时可以生成所有数据库对象的SQL SQL 脚本,将其作脚本,将其作为对数据库的备份,当数据库损坏时可以在为对数据库的备份,当数据库损坏时可以在Query Query Analyzer Analyzer 中运行此中运行此SQL SQL 脚本来重建数据库。脚本来重建数据库。664.54.5查询分析器(查询分析器(Query AnalyzerQuery Analyzer)查询分析器分为两个窗口:查询分析器分为两个窗口:v左侧窗口为左侧窗口为“对象浏览器对象浏览器”窗口,其中:窗口,其中:q“对象”选项卡中显示了连接到SQL Server服务器所包含的数据库以及数据库对象。q“模板”选项卡中则显示了查询分析器所包含的各种Transact-SQL语句模板,可以使用这些模板方便地创建自己的SQL语句。v右侧窗口为右侧窗口为SQLSQL语句的语句的输入窗口输入窗口q输入SQL语句或者打开一个SQL脚本文件后,可以单击工具栏上的“执行查询”按钮 来执行SQL语句。q执行完成后,将在右侧窗口的下部显示执行结果或SQL语句出错信息。 674.64.6管理数据库管理数据库4.6.14.6.1系统数据库系统数据库SQL Server 2000 SQL Server 2000 有四个系统数据库:有四个系统数据库:MasterMaster、ModelModel、MsdbMsdb、TempdbTempdb。这些系统数据库的文件存储在这些系统数据库的文件存储在Microsoft SQL Server Microsoft SQL Server 默认安装目录的默认安装目录的MSSQLMSSQL子目录的子目录的Data Data 文件夹中。文件夹中。1 1 Master Master 数据库数据库Master Master 数据库记录了一个数据库记录了一个SQL Server SQL Server 系统的所有系统的所有系系统信息统信息,这些系统信息主要有:,这些系统信息主要有:(1 1)所有的登录信息)所有的登录信息(2 2)系统设置信息)系统设置信息(3 3)SQL Server SQL Server 初始化信息初始化信息(4 4)系统中其它系统数据库和用户数据库的相关信息,包括其)系统中其它系统数据库和用户数据库的相关信息,包括其主文件的存放位置等主文件的存放位置等682. Model 2. Model 数据库数据库Model Model 数据库是所有用户数据库和数据库是所有用户数据库和Tempdb Tempdb 数据库的数据库的创建模板创建模板。当创建数据库时,系统会将当创建数据库时,系统会将Model Model 数据库中的内容复数据库中的内容复制到新建的数据库中去。制到新建的数据库中去。由此可见,利用由此可见,利用Model Model 数据库的模板特性,通过更改数据库的模板特性,通过更改Model Model 数据库的设置,并将时常使用的数据库对象复制数据库的设置,并将时常使用的数据库对象复制到到ModelModel数据库中可以大大简化数据库及其对象的创建设数据库中可以大大简化数据库及其对象的创建设置工作,为用户节省大量的时间。置工作,为用户节省大量的时间。通常可以将以下内容添加到通常可以将以下内容添加到Model Model 数据库中:数据库中:(1 1)数据库的最小容量)数据库的最小容量(2 2)数据库选项设置)数据库选项设置(3 3)经常使用的数据库对象,如用户自定义的数据类型、函数)经常使用的数据库对象,如用户自定义的数据类型、函数规则、缺省值等规则、缺省值等693 3 Msdb Msdb 数据库数据库SQL Server SQL Server Enterprise Manager SQL Server SQL Server Enterprise Manager 和和SQL SQL Server Agent Server Agent 使用使用Msdb Msdb 数据库来存储计划信息以及与数据库来存储计划信息以及与备份和还原相关的信息,尤其是备份和还原相关的信息,尤其是SQL Server Agent SQL Server Agent 需要需要使用它来执行安排工作和警报记录操作者等操作。使用它来执行安排工作和警报记录操作者等操作。4. Tempdb 4. Tempdb 数据库数据库Tempdb Tempdb 数据库用作系统的数据库用作系统的临时存储空间临时存储空间。其主要作用有:其主要作用有:(1 1)存储用户建立的临时表和临时存储过程)存储用户建立的临时表和临时存储过程(2 2)存储用户说明的全局变量值)存储用户说明的全局变量值(3 3)为数据排序创建临时表)为数据排序创建临时表(4 4)存储用户利用游标说明所筛选出来的数据)存储用户利用游标说明所筛选出来的数据在在Tempdb Tempdb 数据库中所做的存储不会被记录,因而在数据库中所做的存储不会被记录,因而在Tempdb Tempdb 数据库中的表上进行数据操作比在其它数据库中数据库中的表上进行数据操作比在其它数据库中要快得多。要快得多。704.6.24.6.2实例数据库实例数据库SQL Server 2000 SQL Server 2000 有两个实例数据库:有两个实例数据库:pubspubs 和和NorthwindNorthwind。与系统数据库一样,实例数据库的文件也存储在与系统数据库一样,实例数据库的文件也存储在Microsoft SQL Server Microsoft SQL Server 默认安装目录的默认安装目录的MSSQL MSSQL 子目录的子目录的Data Data 文件夹中。文件夹中。pubs pubs 和和Northwind Northwind 数据库可以作为数据库可以作为SQL Server SQL Server 的学习工的学习工具,具,SQL Server Books OnlineSQL Server Books Online中的实例基本上都是基于这两中的实例基本上都是基于这两个数据库来讲解的,其中:个数据库来讲解的,其中:vpubs pubs 实例数据库存储了一个虚构的图书出版公司的基本情况。实例数据库存储了一个虚构的图书出版公司的基本情况。vNorthwind Northwind 实例数据库包含了一个公司的销售数据,此公司名为实例数据库包含了一个公司的销售数据,此公司名为Northwind Northwind 商人(商人(Northwind TradersNorthwind Traders),是一个虚构的公司,从事食品),是一个虚构的公司,从事食品的进出口业务。的进出口业务。如果改变了实例数据库的内容或不小心删除了实例数据库如果改变了实例数据库的内容或不小心删除了实例数据库想将其回复到初始状态可以用查询分析器运行安装目录想将其回复到初始状态可以用查询分析器运行安装目录MSSQLInstall MSSQLInstall 中的中的Instpubs.sqlInstpubs.sql 或或Instnwnd.sqlInstnwnd.sql程序来重程序来重建建pubs pubs 或或Northwind Northwind 数据库。数据库。714.6.34.6.3创建数据库创建数据库4.6.3.1文件与文件组文件与文件组在在SQL Server SQL Server 中数据库是由中数据库是由数据库文件数据库文件和和事事务日志文件务日志文件组成的。组成的。一个数据库至少应包含一个数据库文件和一个一个数据库至少应包含一个数据库文件和一个事物日志文件。事物日志文件。721. 1. 数据库文件(数据库文件(Database FileDatabase File)数据库文件是存放数据库数据和数据库对象的文件。数据库文件是存放数据库数据和数据库对象的文件。一个数据库可以有一个或多个数据库文件,一个数据一个数据库可以有一个或多个数据库文件,一个数据库文件只属于一个数据库。库文件只属于一个数据库。当有多个数据库文件时有一个文件被定义为主数据库当有多个数据库文件时有一个文件被定义为主数据库文件(文件(Primary Database FilePrimary Database File),扩展名为),扩展名为mdfmdf,它用,它用来存储数据库的启动信息和部分或全部数据。来存储数据库的启动信息和部分或全部数据。一个数据库只能有一个主数据库文件。一个数据库只能有一个主数据库文件。其它数据库文件被称为次数据库文件(其它数据库文件被称为次数据库文件(Secondary Secondary Database FileDatabase File),扩展名为),扩展名为ndfndf,用来存储主文件没存,用来存储主文件没存储的其它数据。储的其它数据。采用多个数据库文件来存储数据的优点体现在:采用多个数据库文件来存储数据的优点体现在:(1 1)数据库文件可以不断扩充而不受操作系统文件大小的限制。)数据库文件可以不断扩充而不受操作系统文件大小的限制。(2 2)可以将数据库文件存储在不同的硬盘中,这样可以同时对)可以将数据库文件存储在不同的硬盘中,这样可以同时对几个硬盘做数据存取,提高了数据处理的效率,这对于服务器型几个硬盘做数据存取,提高了数据处理的效率,这对于服务器型的计算机尤为有用。的计算机尤为有用。732. 2. 事务日志文件(事务日志文件(Transaction Log FileTransaction Log File)事务日志文件是用来记录数据库更新情况的文事务日志文件是用来记录数据库更新情况的文件,扩展名为件,扩展名为ldfldf。例如,使用例如,使用INSERTINSERT、UPDATEUPDATE、DELETE DELETE 等对数等对数据库进行更改的操作都会记录在此文件中,而如据库进行更改的操作都会记录在此文件中,而如SELECT SELECT 等对数据库内容不会有影响的操作则不等对数据库内容不会有影响的操作则不会记录在案。会记录在案。一个数据库可以有一个或多个事务日志文件。一个数据库可以有一个或多个事务日志文件。74SQL Server SQL Server 中采用中采用“Write-AheadWrite-Ahead(提前写)(提前写)”方式的事务,即对数据库的修改先写入事务日方式的事务,即对数据库的修改先写入事务日志中,再写入数据库。志中,再写入数据库。其具体操作是:其具体操作是:v系统先将更改操作写入事务日志中。系统先将更改操作写入事务日志中。v再更改存储在计算机缓存中的数据,为了提高执行再更改存储在计算机缓存中的数据,为了提高执行效率,此更改不会立即写到硬盘中的数据库,而是由效率,此更改不会立即写到硬盘中的数据库,而是由系统以固定系统以固定4 4 的时间间隔执行的时间间隔执行CHECKPOINT CHECKPOINT 命令,将更命令,将更改过的数据批量写入硬盘。改过的数据批量写入硬盘。vSQL Server SQL Server 有个特点,它在执行数据更改时会设置有个特点,它在执行数据更改时会设置一个一个开始点开始点和一个和一个结束点结束点,如果尚未到达结束点就因,如果尚未到达结束点就因某种原因使操作中断,则在某种原因使操作中断,则在SQL Server SQL Server 重新启动时会重新启动时会自动还原已修改的数据使其返回未被修改的状态。自动还原已修改的数据使其返回未被修改的状态。v由此可见,当数据库破坏时可以用事务日志还原数由此可见,当数据库破坏时可以用事务日志还原数据库内容。据库内容。753. 3. 文件组()文件组()文件组文件组是将多个数据库文件集合起来形成的一个整体,是将多个数据库文件集合起来形成的一个整体,每个文件组有一个组名。每个文件组有一个组名。与数据库文件一样,文件组也分与数据库文件一样,文件组也分为为主文件组主文件组和和次文件次文件组组。一个文件一个文件只能存在于只能存在于一个文件组一个文件组中,中,一个文件组一个文件组也只也只能被能被一个数据库一个数据库使用。使用。主文件组中包含了所有的主文件组中包含了所有的系统表系统表。当建立数据库时,主文件组包括主数据库文件和未指当建立数据库时,主文件组包括主数据库文件和未指定组的其它文件。定组的其它文件。在次文件组中可以指定一个缺省文件组,那么在创建在次文件组中可以指定一个缺省文件组,那么在创建数据库对象时:数据库对象时:v如果没有指定将其放在哪一个文件组中,就会将它放在缺省文如果没有指定将其放在哪一个文件组中,就会将它放在缺省文件组中。件组中。v如果没有指定缺省文件组,则主文件组为缺省文件组。如果没有指定缺省文件组,则主文件组为缺省文件组。76用用Query AnalyzerQuery Analyzer创建数据库创建数据库createdatabase数据库名数据库名用用EnterpriseManager创建数据库创建数据库注:注:v数据库的名称最长为数据库的名称最长为128128 个字符,且不区分大小写;个字符,且不区分大小写;v一个服务器在理论上可以管理一个服务器在理论上可以管理32,76732,767 个数据库。个数据库。774.6.44.6.4查看数据库信息查看数据库信息4.6.4.1 4.6.4.1 用用Enterprise Enterprise ManagerManager查查看看数数据据库库信信息息SQL Server SQL Server 提供了目录树的浏览方式,使得提供了目录树的浏览方式,使得浏览数据库信息非常方便、快捷。浏览数据库信息非常方便、快捷。在在Enterprise Manager Enterprise Manager 窗口中查看数据库信窗口中查看数据库信息的方法如下:息的方法如下:方法方法1 1:v在在Enterprise Manager Enterprise Manager 窗口中的左侧目录树窗口中,窗口中的左侧目录树窗口中,展开展开“数据库数据库”文件夹,在某个数据库名称上单击右键,文件夹,在某个数据库名称上单击右键,在出现的快捷菜单中单击在出现的快捷菜单中单击“任务板任务板”要浏览的数据库文要浏览的数据库文件夹。件夹。78方法方法2 2:v在在Enterprise Manager Enterprise Manager 窗口中的左侧目录树窗口中,窗口中的左侧目录树窗口中,展开展开“数据库数据库”文件夹,单击某个数据库名称,然后文件夹,单击某个数据库名称,然后单击单击“查看查看”菜单,在其下拉菜单中单击菜单,在其下拉菜单中单击“任务板任务板”。v操作完成后,在操作完成后,在Enterprise ManagerEnterprise Manager窗口右侧的窗口右侧的“任务板任务板”窗口中看到数据库的窗口中看到数据库的“常规常规”信息、信息、“表表”信息和信息和“向导向导”信息。信息。v在打开数据库文件夹目录树后,可以选择各种数据在打开数据库文件夹目录树后,可以选择各种数据库对象进行信息浏览。库对象进行信息浏览。794.6.4.24.6.4.2用系统存储过程显示数据库信息用系统存储过程显示数据库信息SQL Server SQL Server 提供了许多很有用的系统存储过程,可提供了许多很有用的系统存储过程,可以用它们来得到许多从以用它们来得到许多从Enterprise Manager Enterprise Manager 界面中所不界面中所不易或不能看到的信息。易或不能看到的信息。可以把存储过程当作函数或命令来用。可以把存储过程当作函数或命令来用。1. 1. 用系统存储过程显示数据库结构用系统存储过程显示数据库结构v可以使用系统提供的系统存储过程可以使用系统提供的系统存储过程Sp_helpdb Sp_helpdb 来显示数据库结来显示数据库结构,其语法如下:构,其语法如下:sp_helpdb dbname= namev使用使用Sp_helpdb Sp_helpdb 系统存储过程可以显示指定数据库的信息。系统存储过程可以显示指定数据库的信息。v如果不指定如果不指定dbname=dbname=,namename子句则会显示在子句则会显示在master.dbo.sysdatabasesmaster.dbo.sysdatabases 表中存储的所有数据库信息,命令执表中存储的所有数据库信息,命令执行成功会返回行成功会返回0 0,否则返回,否则返回1 1。如:如:显示显示 Northwind Northwind 数据库的信息。数据库的信息。exec sp_helpdb Northwindexec sp_helpdb Northwind802. 2. 用系统存储过程显示文件信息用系统存储过程显示文件信息v可以使用系统提供的系统存储过程可以使用系统提供的系统存储过程Sp_helpfile Sp_helpfile 来显来显示当前数据库中的文件信息,其语法如下:示当前数据库中的文件信息,其语法如下:sp_helpfile = namev如果不指定文件名称,则会显示当前数据库中所有的如果不指定文件名称,则会显示当前数据库中所有的文件信息。命令执行成功会返回文件信息。命令执行成功会返回0 0,否则返回,否则返回1 1。如:如:显示显示NorthwindNorthwind数据库中数据库中northwindnorthwind文件的文件的信息。信息。use Northwinduse Northwindexec sp_helpexec sp_help813. 3. 用系统存储过程显示文件组信息用系统存储过程显示文件组信息v可以使用系统提供的系统存储过程可以使用系统提供的系统存储过程Sp_help Sp_help 来显示当来显示当前数据库中文件组信息,其语法如下:前数据库中文件组信息,其语法如下:sp_help = namev如果不指定文件组名称,则会显示当前数据库中所有如果不指定文件组名称,则会显示当前数据库中所有的文件组。的文件组。v命令执行成功会返回命令执行成功会返回0 0。否则返回。否则返回1 1。如:如:显示显示NorthwindNorthwind数据库中的所有文件组信数据库中的所有文件组信息。息。use Northwinduse Northwindexec sp_helpexec sp_help824.6.54.6.5更改数据库更改数据库4.6.5.1更改文件及其属性更改文件及其属性可以在可以在Enterprise Manager Enterprise Manager 中利用数据库属性设置中利用数据库属性设置更改数据库文件和事务日志文件。更改数据库文件和事务日志文件。也可以用也可以用ALTER DATABASEALTER DATABASE 命令来更改数据库,命令来更改数据库,ALTER ALTER DATABASE DATABASE 命令可以增加或删除数据库中的文件也可以修命令可以增加或删除数据库中的文件也可以修改文件的属性;应注意的是只有数据库管理员改文件的属性;应注意的是只有数据库管理员(DBADBA)或或具有具有CREATE DATABASE CREATE DATABASE 权限的权限的数据库所有者数据库所有者才有权执行才有权执行此命令。此命令。如:如:修改修改NorthwindNorthwind数据库中的数据库中的NorthwindNorthwind文件增容方文件增容方式为一次增加式为一次增加2MB2MB。alter database Northwindalter database Northwindmodify filemodify file( name = Northwind,( name = Northwind, = 2mb) = 2mb)834.6.5.24.6.5.2更改数据库名更改数据库名v重命名数据库需要使用系统存储过程重命名数据库需要使用系统存储过程Sp_renamedbSp_renamedb,其语法如下:其语法如下:sp_renamedb old_name = old_name, new_name = new_name如:如:假设假设studystudy数据库已存在,更改数据库已存在,更改studystudy数据数据库的名称为库的名称为StudentStudent。exec sp_renamedb study,Studentexec sp_renamedb study,Student844.6.64.6.6删除数据库删除数据库4.6.6.14.6.6.1用用Enterprise Manager Enterprise Manager 删除数据库删除数据库v在在Enterprise Manager Enterprise Manager 中在所要删除的数据库上单击右键,从中在所要删除的数据库上单击右键,从快捷菜单中选择快捷菜单中选择“删除删除”选项即可删除数据库选项即可删除数据库v也可以选择数据库文件夹或图标后从工具栏中选择也可以选择数据库文件夹或图标后从工具栏中选择 图标来删图标来删除数据库除数据库v系统会提示确认是否要删除数据库系统会提示确认是否要删除数据库v删除数据库一定要慎重。因为删除数据库后,与此数据库有关删除数据库一定要慎重。因为删除数据库后,与此数据库有关联的数据库文件和事务日志文件都会被删除,存储在系统数据库联的数据库文件和事务日志文件都会被删除,存储在系统数据库中的关于该数据库的所有信息也会被删除。中的关于该数据库的所有信息也会被删除。4.6.6.24.6.6.2用用DROP DATABASE DROP DATABASE 命令删除数据库命令删除数据库vDROP DATABASE DROP DATABASE 命令可以从命令可以从SQL Server SQL Server 中一次删除一个或几个中一次删除一个或几个数据库。数据库所有者数据库。数据库所有者DBO DBO 和数据库管理员和数据库管理员DBA DBA 才有权执行此命才有权执行此命令。令。如:如:删除数据库删除数据库studystudy。drop database studydrop database study854.6.74.6.7压缩数据库压缩数据库数据库在使用一段时间后时常会出现因数据删数据库在使用一段时间后时常会出现因数据删除而造成数据库中除而造成数据库中空闲空间太多空闲空间太多的情况,这时就的情况,这时就需要减少分配给数据库文件和事务日志文件的磁需要减少分配给数据库文件和事务日志文件的磁盘空间,以免浪费磁盘空间。盘空间,以免浪费磁盘空间。当数据库中没有数据时,可以修改数据库文件当数据库中没有数据时,可以修改数据库文件属性,直接改变其占用空间;属性,直接改变其占用空间;但当数据库中有数据时这样做会破坏数据库中但当数据库中有数据时这样做会破坏数据库中的数据,因此需要使用压缩的方式来缩减数据库的数据,因此需要使用压缩的方式来缩减数据库空间;空间;对数据库可以进行对数据库可以进行自动压缩自动压缩,也可以进行,也可以进行人工人工压缩压缩。864.6.7.14.6.7.1自动压缩数据库自动压缩数据库v在在Enterprise Manager Enterprise Manager 中左侧窗口中,右健单击某中左侧窗口中,右健单击某个数据库名称,在出现的快捷菜单中,单击个数据库名称,在出现的快捷菜单中,单击“属性属性”菜单项,出现菜单项,出现“数据库属性数据库属性”对话框,单击对话框中对话框,单击对话框中的的“选项选项”选项卡,在本页中选择选项卡,在本页中选择“自动收缩自动收缩”选项,选项,让系统自动压缩数据库。让系统自动压缩数据库。4.6.7.24.6.7.2人工压缩数据库人工压缩数据库人工压缩数据库有以下两种方式:人工压缩数据库有以下两种方式:1用用EnterpriseManager压缩数据库压缩数据库v在在Enterprise Manager Enterprise Manager 中在所要压缩的数据库上单中在所要压缩的数据库上单击右键,从快捷菜单中的击右键,从快捷菜单中的“所有任务所有任务”中选择中选择“收缩收缩数据库数据库”选项,并进行相应的配置。选项,并进行相应的配置。872用用Transact-SQL命令压缩数据库命令压缩数据库v可以使用可以使用DBCC SHRINKDATABASEDBCC SHRINKDATABASE 和和DBCC SHRINKFILEDBCC SHRINKFILE 命令来压缩数据库。其中,命令来压缩数据库。其中,qDBCC SHRINKDATABASE 命令对数据库进行压缩;qDBCC SHRINKFILE 命令对数据库中指定的文件进行压缩。(1 1)DBCC SHRINKDATABASEDBCC SHRINKDATABASE命令命令如:如:压缩数据库压缩数据库studystudy的未使用空间为数据库的未使用空间为数据库大小的大小的20%20%。dbcc shrinkdatabase (study, 20)dbcc shrinkdatabase (study, 20)(2 2)DBCC SHRINKFILEDBCC SHRINKFILE如:如:压缩数据库压缩数据库studystudy中的数据库文件中的数据库文件StudyStudy的的大小到大小到1MB1MB。 use studyuse studydbcc shrinkfile (Study, 1)dbcc shrinkfile (Study, 1)884.74.7管理数据表管理数据表4.7.1用用EnterpriseManager创建数据库表创建数据库表4.7.2修改表修改表4.4.2.1用用EnterpriseManager修改数据表的结构修改数据表的结构4.4.2.2用存储过程用存储过程Sp_rename修改表名和列名修改表名和列名如:如:更改更改StudyStudy表的列表的列s_no s_no 名称为名称为stu_nostu_no。 exec sp_rename Study.s_no, stu_no, columnexec sp_rename Study.s_no, stu_no, column如:如:更改更改study study 表的名称为表的名称为StudentStudent。exec sp_rename study, Studentexec sp_rename study, Student894.7.3查看表查看表4.7.3.1查看表的属性查看表的属性4.7.3.2查看数据表中的数据查看数据表中的数据q在Enterprise Manager 中,用右键单击要查看数据的表,从快捷菜单中选择“打开表”,再选择其子菜单中的“返回所有行”。 4.7.3.34.7.3.3用系统存储过程用系统存储过程Sp_help Sp_help 查看表的信息查看表的信息qSp_help 存储过程可以提供指定的数据库对象的信息和系统或用户定义的数据类型的信息。 如:如:显示当前数据库中所有对象的信息。显示当前数据库中所有对象的信息。exec sp_helpexec sp_help如:如:显示表显示表StudentStudent的信息。的信息。exec sp_help Studentexec sp_help Student904.8用用EnterpriseManager管理数据管理数据4.8.1添加数据添加数据4.8.2删除数据删除数据4.8.3修改数据修改数据914.9SQLServer的帐号和存取权限的帐号和存取权限数据的数据的安全性安全性是指保护数据以防止因不合理的是指保护数据以防止因不合理的使用而造成数据的泄密和破坏,这就要采取一定使用而造成数据的泄密和破坏,这就要采取一定的安全保护措施。的安全保护措施。在数据库管理系统中,用在数据库管理系统中,用检查口令检查口令等手段来检等手段来检查用户身份,通过检查的用户才能进入数据库系查用户身份,通过检查的用户才能进入数据库系统中。统中。当用户对数据库执行操作时,系统自动检查用当用户对数据库执行操作时,系统自动检查用户是否有权限执行这些操作。户是否有权限执行这些操作。924.9.1SQLServer的验证模式的验证模式为为了了实实现现安安全全性性,SQLServer对对用用户户的的访访问问进进行行两两个个阶段的检验:阶段的检验:(1)验证阶段()验证阶段(Authentication):):v用用户户在在SQLServer上上获获得得对对任任何何数数据据库库的的访访问问权权限限之之前前,必必须须登登录到录到SQLServer上,并且被认为是合法的。上,并且被认为是合法的。vSQLServer或者或者WindowsNT/2000对用户进行验证。对用户进行验证。v如如果果验验证证通通过过,用用户户就就可可以以连连接接到到SQLServer上上,否否则则,服服务务器器将拒绝用户登录。从而保证了系统安全。将拒绝用户登录。从而保证了系统安全。(2)许可确认阶段()许可确认阶段(PermissionValidation):):v用用户户验验证证通通过过后后,登登录录到到SQLServer上上,系系统统检检查查用用户户是是否否有有访访问服务器上数据的权限。问服务器上数据的权限。在验证阶段,系统是对用户登录进行验证。在验证阶段,系统是对用户登录进行验证。SQLServer和和WindowsNT/2000是结合在一起的,因是结合在一起的,因此产生了两种验证模式:此产生了两种验证模式:Windows验证模式验证模式和和混合验证模混合验证模式式。934.9.1.1 Windows4.9.1.1 Windows验证模式验证模式在在该该验验证证模模式式下下,SQL Server检检测测当当前前使使用用的的Windows用用户户帐帐号号,并并在在Syslogins表表中中查查找找该该帐帐号号,以以确定该帐号是否有权登录。确定该帐号是否有权登录。在在这这种种方方式式下下,用用户户不不必必提提供供密密码码或或者者登登录录名名让让SQLServer验证。验证。Windows验证模式下主要有以下优点:验证模式下主要有以下优点:1数数据据库库管管理理员员的的工工作作可可以以集集中中在在管管理理数数据据库库上上面面,而而不不是是管管理理用用户户帐帐户户。对对用用户户帐帐户户的的管管理理可可以以交交给给WindowsNT/2000去去完完成。成。2WindowNT/2000有有着着更更强强的的用用户户帐帐户户管管理理工工具具。可可以以设设置置帐帐户户锁锁定定、密密码码期期限限等等。如如果果不不是是通通过过定定制制来来扩扩展展SQLServer,SQLServer是不具备这些功能的。是不具备这些功能的。3WindowsNT/2000的的组组策策略略支支持持多多个个用用户户同同时时被被授授权权访访问问SQLServer。94但但是是,应应该该注注意意的的是是,要要在在客客户户和和服服务务器器间间建建立立连连接接,使使用用该该验验证证模模式式时时,必必须须满满足足以以下下两两个个条件中的一个:条件中的一个:1客客户户端端的的用用户户必必须须有有合合法法的的服服务务器器上上的的WindowsNT/2000帐帐户户,服服务务器器能能够够在在自自己己的的域域中中或或者者信信任任域域中验证该用户。中验证该用户。2服服务务器器启启动动了了Guest帐帐户户,但但是是该该方方法法会会带带来来安安全全上的隐患,因而不是一个好的方法。上的隐患,因而不是一个好的方法。954.9.1.2 4.9.1.2 混合验证模式混合验证模式混混合合验验证证模模式式允允许许以以SQLServer验验证证或或者者Windows验验证模式来进行验证。证模式来进行验证。使用哪个模式取决于在最初的通信时使用的网络库。使用哪个模式取决于在最初的通信时使用的网络库。v如如果果一一个个用用户户使使用用的的是是TCP/IPSockets进进行行登登录录验验证证,则则将将使使用用SQLServer验证模式;验证模式;v如果用户使用命名管道,则登录时将使用如果用户使用命名管道,则登录时将使用Windows验证模式。验证模式。这这种种模模式式能能更更好好地地适适应应用用户户的的各各种种环环境境。但但是是对对于于Windows9X系系列列的的操操作作系系统统,只只能能使使用用SQLServer验验证证模式。模式。SQLServer验证模式下,处理登录的过程为:用户在验证模式下,处理登录的过程为:用户在输入登录名和密码后,输入登录名和密码后,SQLServer在系统注册表中检测在系统注册表中检测输入的登录名和密码。如果输入的登录名存在,而且密输入的登录名和密码。如果输入的登录名存在,而且密码也正确,就可以登录到码也正确,就可以登录到SQLServer上。上。96混合验证模式具有以下优点:混合验证模式具有以下优点:1创建了创建了WindowsNT/2000之上的另外一个安全层次。之上的另外一个安全层次。2支持更大范围的用户,如非支持更大范围的用户,如非WindowsNT客户、客户、Novell网络等。网络等。3一个应用程序可以使用单个的一个应用程序可以使用单个的SQLServer登录和口令。登录和口令。由此可以看出:由此可以看出:v验证模式的选择通常与网络验证的模型和客户与服务器间的通验证模式的选择通常与网络验证的模型和客户与服务器间的通信协议有关。信协议有关。v如果网络主要是如果网络主要是WindowsNT/2000网,则用户登录到网,则用户登录到WindowsNT/2000时已经得到了确认,因此,使用时已经得到了确认,因此,使用Windows验证模式将减验证模式将减轻系统的工作负担;轻系统的工作负担;v但是,如果网络主要是但是,如果网络主要是Novell网络或者对等网,则使用网络或者对等网,则使用SPX协协议和议和SQLServer验证模式将是很方便的。因为,这种情况下,只验证模式将是很方便的。因为,这种情况下,只需创建需创建SQLServer登录帐户,而不用创建登录帐户,而不用创建WindowsNT/2000帐户。帐户。974.9.1.3 4.9.1.3 设置验证模式设置验证模式在在第第一一次次安安装装SQLServer,或或者者使使用用SQLServer连连接接其他服务器的时候,需要指定验证模式。其他服务器的时候,需要指定验证模式。对对于于已已经经指指定定验验证证模模式式的的SQLServer服服务务器器,在在SQLServer中还可以进行修改。操作步骤如下:中还可以进行修改。操作步骤如下:1打开企业管理器,展开打开企业管理器,展开“服务器组服务器组”文件夹,在其中的某个文件夹,在其中的某个服务器上单击右键,在弹出的快捷菜单上选择服务器上单击右键,在弹出的快捷菜单上选择“编辑编辑SQLServer注册属性注册属性”菜单命令,这时打开菜单命令,这时打开 “已注册的已注册的SQLServer属性属性”对话框。对话框。2 2在对话框中设置验证模式后,单击在对话框中设置验证模式后,单击“确定确定”按钮即可。按钮即可。但要注意:修改验证模式后,必须首先停止但要注意:修改验证模式后,必须首先停止SQL SQL ServerServer服务服务,然后重新启动,然后重新启动SQL ServerSQL Server,才能使新的设,才能使新的设置生效。置生效。 984.9.2帐号和角色帐号和角色在在SQLServer中,帐号有两种:中,帐号有两种:v一种是一种是登录服务器登录服务器的登录帐号(的登录帐号(loginname)v另外一种是另外一种是使用数据库使用数据库的用户帐号(的用户帐号(username)。)。登登录录帐帐号号是是指指能能登登录录到到SQLServer的的帐帐号号,属属于于服服务务器器的的层层面面,它它本本身身并并不不能能让让用用户户访访问问服服务务器器中中的的数数据据库库,而而登登录录者者要要使使用用服服务务器器中中的的数数据据库库时时,必必须须要要有有用用户户帐帐号号才才能能够够存存取取数数据库。据库。就就如如同同公公司司门门口口先先刷刷卡卡进进入入(登登录录服服务务器器),然然后后再再拿拿钥钥匙打开自己的办公室(进入数据库)一样。匙打开自己的办公室(进入数据库)一样。用户名用户名要在特定的数据库内创建,并关联一个要在特定的数据库内创建,并关联一个登录名登录名(当(当一个用户创建时,必须关联一个登录名)。一个用户创建时,必须关联一个登录名)。用户定义的信息存放在服务器的每个数据库的用户定义的信息存放在服务器的每个数据库的sysusers表中,表中,用户没有密码同它相关联。用户没有密码同它相关联。通过授权给用户来指定用户可以访问的数据库对象的权限。通过授权给用户来指定用户可以访问的数据库对象的权限。994.9.2.1 4.9.2.1 服务器的登录帐号服务器的登录帐号1查看登录帐号查看登录帐号方法方法1:使用企业管理器:使用企业管理器v在安装在安装SQLServer后,系统默认创建后,系统默认创建三个三个登录帐号。登录帐号。v进入企业管理器,展开进入企业管理器,展开“SQLServer组组”,找到所要,找到所要连接的连接的SQLServer服务器,展开该服务器对应的文件服务器,展开该服务器对应的文件夹,再展开夹,再展开“安全性安全性”文件夹,单击文件夹,单击“登录登录”选项,选项,即可看到系统创建的即可看到系统创建的默认登录帐号默认登录帐号及已建立的其他登及已建立的其他登录帐号。录帐号。100其其 中中 : BUILTINAdministrators、 域域 名名Administrator、sa是是默默认认的的登登录录帐帐号号,它它们们的的含含义如下:义如下:(1)BUILTINAdministrators:凡凡是是Windows NTServer/2000中中Administrators组组的的帐帐号号都都允允许许登登录录SQLServer。( 2) 域域 名名 Administrator: 允允 许许 NT Server的的Administrator帐号登录。帐号登录。(3)sa:超超级级管管理理员员帐帐号号,允允许许SQLServer的的系系统统管管 理理 员员 登登 录录 , 此此 SQL Server的的 管管 理理 员员 不不 一一 定定 是是WindowsNTServer/2000的管理员(但通常是)。的管理员(但通常是)。方法方法2:使用存储过程:使用存储过程v使用使用sp_helplogins可查看登录帐号。格式是:可查看登录帐号。格式是:exec sp_helplogins1012.创建一个登录帐号创建一个登录帐号在此介绍两种创建方法:在此介绍两种创建方法:v一种是利用一种是利用SQLServer的的企业管理器企业管理器。v一种是利用一种是利用SQLServer提供的提供的存储过程存储过程。方法方法1:(1)在在SQLServer的的企企业业管管理理器器下下,展展开开“SQLServer组组”文文件件夹夹,找找到到需需要要建建立立登登录录帐帐号号的的服服务务器器并并展展开开其其文文件件夹夹,再再展展开开“安安全全性性”文文件件夹夹,在在“登登录录”选选项项上上右右击击鼠鼠标标,在在出出现现的的快快捷捷菜菜单单中中单单击击“新新建建登登录录”菜菜单单命命令令,打打开开“SQLServer登登录录属属性性”对话框。对话框。(2)在在“名名称称”文文本本框框中中输输入入要要创创建建的的登登录录帐帐号号名名称称,如如:“StudyAdm”,在在“身身份份验验证证”选选项项组组中中,单单击击“SQLServer身身份份验验证证”单单选选钮钮,并并输输入入密密码码,然然后后在在“默默认认设设置置”选选项项组组中中,选选择择数数据据数数据据库库列列表表中中的的某某个个数数据据库库,如如:“Study”,表表示示该该登录帐号默认登录到登录帐号默认登录到Study数据库中。数据库中。v(3)在对话框中,单击)在对话框中,单击“服务器角色服务器角色”标签,打开标签,打开“服务器角服务器角色色”选项卡,在此选项卡中,可以设置登录帐号所属的服务器角选项卡,在此选项卡中,可以设置登录帐号所属的服务器角色。色。102角色(角色(role)是一组用户所构成的组,可分为是一组用户所构成的组,可分为服务器角色服务器角色与与数据库角色数据库角色。以下先介绍服务器角色,数据库角色放在后面讲解。以下先介绍服务器角色,数据库角色放在后面讲解。服服务务器器角角色色是是负负责责管管理理与与维维护护SQLServer的的组组,一一般般只只会会指指定定需需要要管管理理服务器的登录帐号属于服务器角色。服务器的登录帐号属于服务器角色。SQLServer在安装过程中定义在安装过程中定义几个固定的服务器角色几个固定的服务器角色,其具体权限如下:,其具体权限如下: sysadminsysadmin:全全称称为为System System AdministratorsAdministrators,可可以以在在SQLServer中中执执行行任任何何活动。活动。 serveradminserveradmin:全全称称为为Server Server AdministratorsAdministrators,可可以以设设置置服服务务器器范范围围的的配配置置选项,关闭服务器。选项,关闭服务器。 setupadminsetupadmin:全全称称为为Setup Setup AdministratorsAdministrators,可可以以管管理理链链接接服服务务器器和和启启动动过过程。程。 securityadminsecurityadmin:全全称称为为Security Security AdministratorsAdministrators,可可以以管管理理登登录录和和创创建建数数据库的权限,还可以读取错误日志和更改密码。据库的权限,还可以读取错误日志和更改密码。 processadminprocessadmin:全全称称为为Process Process AdministratorsAdministrators,可可以以管管理理在在SQLServer中中运行的进程。运行的进程。 dbcreatordbcreator:全称为:全称为Database CreatorsDatabase Creators,可以创建、更改和除去数据库。,可以创建、更改和除去数据库。 diskadmindiskadmin:全称为:全称为Disk AdministratorsDisk Administrators,可以管理磁盘文件。,可以管理磁盘文件。 bulkadminbulkadmin:全全称称为为Bulk Bulk Insert Insert AdministratorsAdministrators,可可以以执执行行BULK BULK INSERTINSERT(大容量插入)语句。(大容量插入)语句。注注:属属于于WindowsNT/2000Administrators组组的的帐帐号号,在在SQLServer中中被自动设置为被自动设置为sysadmin服务器角色。服务器角色。103(4)在在对对话话框框中中,单单击击“数数据据库库访访问问”标标签签,打打开开“数数据据库库访访问问”选选项项卡卡。在在此此选选项项卡卡中中可可选选择择登登录录帐帐号号可可以以访访问问的的数数据据库库,即即选选中中所所需需要要的的数据库左面的复选框。数据库左面的复选框。(5)设设置置完完毕毕后后,单单击击“确确定定”按按钮钮,即即可可完成该登录帐号的创建。完成该登录帐号的创建。(6 6)在在步步骤骤(2 2)中中,如如果果选选择择“WindowsWindows身身份份验验证证”单单选选钮钮,则则“名名称称”文文本本框框后后面面的的按按钮钮被被激激活活,单单击击可可打打开开选选择择WindowsWindows用用户户的的对对话话框框。从从该该对对话话框框中中可可选选择择WindowsWindows系系统统的的用用户户作作为为SQL SQL ServerServer的登录帐号。的登录帐号。 104方法方法2:利利用用SQLServer提提供供的的存存储储过过程程sp_addlogin创创建建登登录录帐号。格式是:帐号。格式是:EXEC sp_addlogin登录帐号名称, 密码, 默认数据库名, 使用的语言注:注:(1)使用的语言如果指定为)使用的语言如果指定为NULL,则表示使用系统默认语言。,则表示使用系统默认语言。(2)此此存存储储过过程程只只是是添添加加了了一一个个登登录录帐帐号号,该该帐帐号号只只能能登登录录到到SQLServer,并并不不对对某某特特定定数数据据库库具具有有存存取取权权限限,所所以以,还还需需要要利用利用sp_adduser存储过程将此登录帐号加入到指定数据库中才行。存储过程将此登录帐号加入到指定数据库中才行。EXECsp_addloginMike,m1934,study,NULL此语句建立了一个名称为此语句建立了一个名称为Mike的登录帐号。的登录帐号。USEstudyEXECsp_adduserMike此语句将此语句将Mike登录帐号加入到数据库登录帐号加入到数据库study中。中。1053更改登录帐号属性更改登录帐号属性(1)进进入入企企业业管管理理器器,展展开开“SQLServer组组”,找找到到所所要要连连接接的的SQLServer服服务务器器,展展开开该该服服务务器器对对应应的的文文件件夹夹,再再展展开开“安安全全性性”文文件件夹夹,单单击击“登登录录”选选项项,在在企企业业管管理理器器的的右右侧侧窗窗格格中中即即可看到系统创建的默认登录帐号及已建立的其他登录帐号。可看到系统创建的默认登录帐号及已建立的其他登录帐号。v在在需需要要更更改改属属性性的的帐帐号号上上单单击击右右键键,在在出出现现的的快快捷捷菜菜单单中中,单单击击“属属性性”菜菜单单项项,即即可可打打开开登登录录帐帐号号的的属属性性对对话话框框,在在该该对对话话框框中中可可以以更更改改有有关关该该帐帐号号的的密密码码、服服务务器器角角色色、访访问问的的数数据据库库等等,该该对对话话框框中中各各项项的的含含义义如如同同创创建建登登录录帐帐号号时时的的含含义义相相同同,在在此此不不再重复。再重复。(2)使用存储过程)使用存储过程sp_password可改变登录帐号的密码。格式是:可改变登录帐号的密码。格式是:EXEC sp_password 旧密码, 新密码, 登录帐号名称EXECsp_passwordm1934,mike1934,Mike此语句将此语句将Mike帐号的密码由原来的帐号的密码由原来的m1934改为改为mike1934。106(3)使使用用存存储储过过程程sp_addsrvrolemember可可以以将将登登录录帐号加入服务器的角色中。格式是:帐号加入服务器的角色中。格式是:EXEC sp_addsrvrolemember 登录帐号, 服务器角色名称EXECsp_addsrvrolememberMike,dbcreator此语句是将登录帐号此语句是将登录帐号Mike加入到加入到dbcreator服服务器角色中。务器角色中。1074删除登录帐号删除登录帐号方法方法1:使用企业管理器:使用企业管理器v进进入入企企业业管管理理器器,展展开开“SQLServer组组”,找找到到所所要要连连接接的的SQLServer服服务务器器,展展开开该该服服务务器器对对应应的的文文件件夹夹,再再展展开开“安安全全性性”文文件件夹夹,单单击击“登登录录”选选项项,在在企企业业管管理理器器的的右右侧侧窗窗格格中中即即可看到系统创建的默认登录帐号及已建立的其他登录帐号。可看到系统创建的默认登录帐号及已建立的其他登录帐号。v在在需需要要更更改改属属性性的的帐帐号号上上单单击击右右键键,在在出出现现的的快快捷捷菜菜单单中中,单单击击“删删除除”菜菜单单项项,此此时时会会打打开开一一个个提提示示对对话话框框,单单击击“是是”按按钮确定删除。钮确定删除。方法方法2:使用存储过程:使用存储过程v使用存储过程使用存储过程sp_droplogin可删除某一登录帐号。格式是:可删除某一登录帐号。格式是:USE 数据库EXECsp_droplogin 登录帐号USEstudyEXECsp_droploginMike该语句可从数据库该语句可从数据库Study中删除中删除Mike登录帐号。登录帐号。1084.9.2.2 4.9.2.2 数据库的用户数据库的用户一一个个SQLServer的的登登录录帐帐号号只只有有成成为为该该数数据据库库的的用用户户时,对该数据库才有访问权限。时,对该数据库才有访问权限。在在安安装装SQL Server后后,默默认认数数据据库库如如:master、tempdb、msdb等包含两个用户:等包含两个用户:dbo和和guest。任任何何一一个个登登录录帐帐号号都都可可以以通通过过guest用用户户帐帐号号来来存存取取相相应的数据库。应的数据库。但但是是当当新新建建一一个个数数据据库库时时,默默认认只只有有dbo用用户户帐帐号号而而没有没有guest用户帐号。用户帐号。每个登录帐号在一个数据库中只能有一个用户帐号,每个登录帐号在一个数据库中只能有一个用户帐号,但每个登录帐号可以在不同的数据库中各有一个用户帐但每个登录帐号可以在不同的数据库中各有一个用户帐号。号。如果在新建登录帐号过程中,指定对某个数据库具有如果在新建登录帐号过程中,指定对某个数据库具有存取权限,则在该数据库中将自动创建一个与该登录帐存取权限,则在该数据库中将自动创建一个与该登录帐号同名的用户帐号。号同名的用户帐号。109注:注:(1)master和和tempdb数数据据库库中中的的guest用用户户帐帐号号不不能能删删除除,而而其其他他数数据据库库中中的的guest用用户户帐帐号号可可以删除。以删除。v因因为为master数数据据库库中中记记录录了了所所有有的的系系统统信信息息,每每个个登登录录的的用用户户若若没没有有特特别别指指定定数数据据库库,默默认认都都是是使使用用master数据库。数据库。v而而tempdb数数据据库库是是临临时时使使用用的的数数据据库库,所所有有与与服服务务器器连连接接的的数数据据都都会会存存储储在在该该处处,因因此此也也必必须须提提供供guest用户帐号。用户帐号。(2)登录帐号具有对某个数据库的访问权限,)登录帐号具有对某个数据库的访问权限,并不表示该登录帐号对该数据库具有存取的权限。并不表示该登录帐号对该数据库具有存取的权限。如果要对数据库的对象进行插入、更新等操作,如果要对数据库的对象进行插入、更新等操作,还需要设置用户帐号的权限。还需要设置用户帐号的权限。1101查看数据库的用户查看数据库的用户方法方法1:使用企业管理器:使用企业管理器v在在企企业业管管理理器器中中,展展开开SQLServer组组及及其其服服务务器器,在在“数数据据库库”文文件件夹夹中中,展展开开某某数数据据库库如如:Study的的文文件件夹夹,单单击击“用用户户”选选项项,则则可可在在企企业业管管理理器器的的右右窗窗格格中中显显示示出出目目前前该该数数据据库库中中所所有有的用户。的用户。方法方法2:利用存储过程:利用存储过程格式是:格式是:USE数据库名数据库名EXECsp_helpuserUSEStudyEXECsp_helpuser可列出目前可列出目前Study数据库中所有的数据库用户帐户。数据库中所有的数据库用户帐户。1112创建数据库的用户创建数据库的用户方法方法1:使用企业管理器:使用企业管理器(1)在在企企业业管管理理器器中中,展展开开SQLServer组组及及其其服服务务器器,在在“数数据据库库”文文件件夹夹中中,展展开开某某一一数数据据库库如如:Study的的文文件件夹夹,然然后后在在“用用户户”选选项项上上单单击击鼠鼠标标右右键键,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“新新建建数数据据库库用用户户”命命令令,打开新建用户对话框。打开新建用户对话框。(2)单单击击“登登录录名名”下下拉拉列列表表框框右右端端的的下下拉拉箭箭头头,选选择择“ZHANGSAN”登登录录帐帐号号,此此时时“用用户户名名”文文本本框框中自动显示为中自动显示为“ZHANGSAN”。q可以更改“用户名”文本框中的用户名,也可以在“数据库角色成员”列表框中选择新建用户应该属于的数据库角色。(3)设设置置完完毕毕后后,单单击击“确确定定”按按钮钮,即即可可在在Study数数据据库库中中创创建建一一个个新新的的用用户户帐帐号号。如如果果不不想想创创建建用用户户帐号,单击帐号,单击“取消取消”按钮即可。按钮即可。112方法方法2:使用存储过程:使用存储过程格式是:格式是:USE数据库名数据库名EXECsp_adduser登登录录帐帐号号,用用户户帐帐号号,所所属属的的数数据据库库角角色色USEStudyEXECsp_adduserZHANGSAN,ZHANGSAN,db_owner该语句的功能是向该语句的功能是向Study数据库中,添加一个数据库中,添加一个名称为名称为ZHANGSAN的用户帐号。的用户帐号。1133设置数据库用户帐号的权限设置数据库用户帐号的权限在在创创建建数数据据库库用用户户帐帐号号对对话话框框中中,当当新新建建一一个个新新的的用用户户帐帐号号时时,“登登录录名名”右右侧侧的的“权权限限”按按钮钮是是灰灰色色的的,表表示示不不能能在在创创建建数数据据库库用用户户帐帐号号的的同时设置其权限。同时设置其权限。但但可可以以在在创创建建后后通通过过其其属属性性对对话话框框来来设设置置其其权权限,步骤如下:限,步骤如下:(1)在企业管理器的右窗格中的用户帐号上单击鼠)在企业管理器的右窗格中的用户帐号上单击鼠标右键,然后选择标右键,然后选择“属性属性”命令,打开命令,打开“数据库用户数据库用户属性属性”对话框。对话框。114(2)在)在“数据库用户属性数据库用户属性”对话框中,单击对话框中,单击“权限权限”按钮,打按钮,打开权限设置对话框。在此对话框中,可以设置用户对数据库对象所开权限设置对话框。在此对话框中,可以设置用户对数据库对象所具有的权限。具有的权限。v在在“对对象象”列列中中,显显示示了了数数据据库库中中所所有有的的对对象象,而而“所所有有者者”列列则则显显示示了了相相应应对对象象的的所所有有者者。其其后后的的6 6列列则则是是对对数数据据库库对对象象的的操操作作,具具体体含含义义如下:如下:qSELECT:对表或者视图的查询qINSERT:在表或者视图中插入记录qUPDATE:对表或者视图中的数据修改qDELETE:删除表或者视图中的数据qEXEC:执行存储过程qDRI:Declarative Referential Integrity,可对表的外键加上限制,以达成表的参照完整性。对某个数据库对象而言,如果选中对应的复选框,则表示具有对对某个数据库对象而言,如果选中对应的复选框,则表示具有对该对象进行相应操作的权限。该对象进行相应操作的权限。每个复选框具有每个复选框具有3 3种状态。种状态。v空白时表示未指定权限,或权限还原到未设置状态;空白时表示未指定权限,或权限还原到未设置状态;v当打当打“”时表示具有该权限;时表示具有该权限;v当打当打“”时,表示不具有该权限。时,表示不具有该权限。 115(3)如果要设置对表或者视图的某一字段进行操作)如果要设置对表或者视图的某一字段进行操作的权限,可在列表中选择表或者视图对象,然后单击的权限,可在列表中选择表或者视图对象,然后单击“列列”按钮,可打开按钮,可打开“列权限列权限”对话框。使用该对话框即对话框。使用该对话框即可进行相应权限的设置。可进行相应权限的设置。4删除数据库用户帐号删除数据库用户帐号方法方法1:使用企业管理器:使用企业管理器v在在企企业业管管理理器器中中,展展开开SQLServer组组及及其其服服务务器器,在在“数数据据库库”文文件件夹夹中中,展展开开某某一一数数据据库库如如:Study的的文文件件夹夹,然然后后在在“用用户户”选选项项上上单单击击鼠鼠标标右右键键,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“删删除除”菜菜单命令。单命令。方法方法2:使用存储过程:使用存储过程格式是:格式是:USE数据库名数据库名EXECsp_dropuser用户帐号用户帐号USEStudyEXECsp_dropuserZHANGSAN该语句表示从数据库该语句表示从数据库Study中删除中删除ZHANGSAN用户帐号。用户帐号。1164.9.2.3 4.9.2.3 数据库角色数据库角色角角色色是是一一个个强强大大的的工工具具,可可以以将将用用户户集集中中到到一一个个单单元元中,然后对该单元应用权限。中,然后对该单元应用权限。对对一一个个角角色色授授予予、拒拒绝绝或或废废除除的的权权限限也也适适用用于于该该角角色色的任何成员。的任何成员。可可以以建建立立一一个个角角色色来来代代表表单单位位中中一一类类工工作作人人员员所所执执行行的工作,然后给这个角色授予适当的权限。的工作,然后给这个角色授予适当的权限。和和登登录录帐帐号号类类似似,用用户户帐帐号号也也可可以以分分成成组组,称称为为数数据据库角色库角色(DatabaseRoles)。)。数数据据库库角角色色应应用用于于单单个个数数据据库库。在在SQLServer中中,数数据库角色可分为两种:据库角色可分为两种:v标标准准角角色色:由由数数据据库库成成员员所所组组成成的的组组,此此成成员员可可以以是是用用户户或或者者其他的数据库角色。其他的数据库角色。v应应用用程程序序角角色色:用用来来控控制制应应用用程程序序存存取取数数据据库库的的,本本身身并并不不包包括任何成员。括任何成员。1171标准角色标准角色v在在创创建建一一个个数数据据库库时时,系系统统默默认认创创建建10个个固固定定的的标标准准角角色。色。v在在企企业业管管理理器器中中,展展开开SQLServer组组及及其其服服务务器器,在在“数数据据库库”文文件件夹夹中中,展展开开某某一一数数据据库库如如:Study的的文文件件夹夹,然然后后单单击击“角角色色”选选项项,这这时时可可在在企企业业管管理理器器的的右右侧侧窗窗格格中显示出默认的中显示出默认的10个标准角色。个标准角色。qpublic角色是最基本的数据库角色。qdb_owner:在数据库中有全部权限。qdb_accessadmin:可以添加或删除用户ID。qdb_securityadmin:可以管理全部权限、对象所有权、角色和角色成员资格。qdb_ddladmin:可以发出ALLDDL,但不能发出GRANT(授权)、REVOKE或DENY语句。qdb_backupoperator:可以发出DBCC、CHECKPOINT和BACKUP语句。qdb_datareader:可以选择数据库内任何用户表中的所有数据。qdb_datawriter:可以更改数据库内任何用户表中的所有数据。qdb_denydatareader:不能选择数据库内任何用户表中的任何数据。qdb_denydatawriter:不能更改数据库内任何用户表中的任何数据。 118(1)查看角色的属性:)查看角色的属性:下面以下面以StudyStudy数据库中的数据库中的db_ownerdb_owner角色为例说明:角色为例说明: 在企业管理器中,展开在企业管理器中,展开SQLServer组及其服务器,组及其服务器,在在“数据库数据库”文件夹中,展开某一数据库如:文件夹中,展开某一数据库如:Study的的文件夹,然后单击文件夹,然后单击“角色角色”选项,这时可在企业管理选项,这时可在企业管理器的右侧窗格中显示出该数据库的所有角色。器的右侧窗格中显示出该数据库的所有角色。 在右在右侧窗格中,用鼠窗格中,用鼠标右右键单击“db_ownerdb_owner”角色,角色,在出在出现的快捷菜的快捷菜单中,中,单击“属性属性”菜菜单命令,命令,则打开打开“数据数据库角色属性角色属性”对话框框 。q此对话框中列出了目前包括在该角色中的数据库用户帐号,如:对于本例包括abc和dbo两个用户帐号。q默认每个数据库的db_owner中一定包括dbo用户,dbo是默认就存在的用户,就是指数据库的创建者。q在此对话框中,单击“添加”按钮可为该角色添加一个用户,单击“删除”按钮,可从角色中删除被选中的用户,但是dbo是不能被删除的。 119(2)创建新的角色)创建新的角色方法方法1:使用企业管理器:使用企业管理器v在企业管理器中,展开在企业管理器中,展开SQLServer组及其服务器组及其服务器v在在“数据库数据库”文件夹中,展开某一数据库如:文件夹中,展开某一数据库如:Study的文件夹的文件夹v然然后后在在“角角色色”选选项项上上单单击击鼠鼠标标右右键键,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“新建数据库角色新建数据库角色”菜单命令菜单命令v则出现则出现“数据库角色属性数据库角色属性新建角色新建角色”对话框对话框v在该对话框中在该对话框中“名称名称”文本框中输入角色的名称文本框中输入角色的名称v在在“数据库角色类型数据库角色类型”中选择角色的类型为标准角色中选择角色的类型为标准角色v单击单击“添加添加”按钮可向角色中添加成员按钮可向角色中添加成员v设置完成后,单击设置完成后,单击“确定确定”按钮。按钮。方法方法2:使用存储过程:使用存储过程其格式是:其格式是:USE数据库名数据库名EXECsp_addrole角色名角色名,拥有者拥有者USEStudyEXECsp_addroleMyrole,dbo在在Study数据库中创建一名称为数据库中创建一名称为Myrole的角色。的角色。120(3)删除角色)删除角色方法方法1:使用企业管理器:使用企业管理器v在企业管理器中,展开在企业管理器中,展开SQLServer组及其服务器组及其服务器v在在“数据库数据库”文件夹中,展开某一数据库如:文件夹中,展开某一数据库如:Study的文件夹的文件夹v然然后后单单击击“角角色色”选选项项,这这时时在在企企业业管管理理器器的的右右侧侧窗窗格格中中会会显显示出目前所有的角色示出目前所有的角色v在在某某一一角角色色上上单单击击鼠鼠标标右右键键,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“删删除除”菜单命令即可。菜单命令即可。方法方法2:使用存储过程:使用存储过程格式是:格式是:USE数据库名数据库名EXECsp_droprole角色名角色名USEStudyEXECsp_droproleMyrole删除数据库删除数据库Study中的中的Myrole角色。角色。1212应用程序角色应用程序角色v在在我我们们编编写写数数据据库库的的应应用用程程序序时时,可可以以自自己己定定义义应应用用程程序序角角色色,让应用程序的操作者能用我们写的程序来存取让应用程序的操作者能用我们写的程序来存取SQLServer的数据。的数据。v也也就就是是说说,应应用用程程序序的的操操作作者者本本身身并并不不需需要要在在SQLServer上上有有登登录录帐帐号号以以及及用用户户帐帐号号,仍仍然然可可以以存存取取数数据据库库(但但只只能能通通过过我我们们写写的的应应用用程程序序来来操操作作),如如此此可可以以避避免免操操作作者者自自行行登登录录SQLServer。(1)应用程序角色的创建)应用程序角色的创建v使使用用企企业业管管理理器器创创建建应应用用程程序序角角色色的的过过程程与与标标准准角角色色的的创创建建过过程程基基本本相相同同,就就是是在在“数数据据库库角角色色属属性性新新建建角角色色”对对话话框框中中,选择选择“应用程序角色应用程序角色”即可。即可。当用存储过程创建应用程序角色时,应使用以下格式:当用存储过程创建应用程序角色时,应使用以下格式:USE数据库名数据库名EXECsp_setapprole应用程序角色名应用程序角色名,密码密码USEStudyEXECsp_setapproleapprole,11111此语句表示在此语句表示在Study数据库创建一个名称为数据库创建一个名称为approle的应用程序角的应用程序角色,密码为色,密码为11111。1223public数据库角色数据库角色vpublic数据库角色是每个数据库最基本的数据库角色,数据库角色是每个数据库最基本的数据库角色,每个用户可以不属于其他每个用户可以不属于其他9个固定数据库角色,但是至个固定数据库角色,但是至少会属于少会属于public数据库角色。数据库角色。v当在数据库中添加新用户帐号时,当在数据库中添加新用户帐号时,SQLServer会自会自动将新用户帐号加入动将新用户帐号加入public数据库角色中。数据库角色中。1234.9.2.4 4.9.2.4 用户和角色的权限问题用户和角色的权限问题用用户户是是否否具具有有对对数数据据库库存存取取的的权权力力,要要看看其其权权限限设设置置而而定定,但但是是,它它还还要要受受其其角角色色的的权权限限的的限限制。制。1用户权限用户权限继承继承角色的权限角色的权限v数数据据库库角角色色中中可可以以包包含含许许多多用用户户,用用户户对对数数据据库库对对象的存取权限也继承自该角色。象的存取权限也继承自该角色。q假设用户User1属于角色Role1,角色Role1已经取得了对表Table1的SELECT权限,则用户User1也自动取得对表Table1的SELECT权限。q如果Role1对Table1没有INSERT权限,而User1取得了对表Table1的 INSERT权 限 , 则 User1最 终 也 取 得 对 表 Table1的INSERT权限。v而而拒拒绝绝是是优优先先的的,只只要要Role1和和User1中中的的之之一一拒拒绝绝,则该权限就是拒绝的。则该权限就是拒绝的。1242用户分属不同角色用户分属不同角色v如果一个用户分属于不同的数据库角色如果一个用户分属于不同的数据库角色q如:用户User1既属于角色Role1,又属于角色Role2,则用户User1的权限基本上是以Role1和Role2的并集为准。v但是只要有一个拒绝,则用户但是只要有一个拒绝,则用户User1的权限就是拒绝的权限就是拒绝的的1254.10索引索引4.10.14.10.1建索引建索引 在在SQLServer中,除了使用中,除了使用SQL创建索引外,还可用创建索引外,还可用EnterpriseManager创建索引,在创建索引,在Enterprise Manager Enterprise Manager 中创建索引有两种方法:中创建索引有两种方法:1 1用索引创建用索引创建向导向导创建索引创建索引v在在Enterprise ManagerEnterprise Manager的目录树中选择要创建索引的表所在的的目录树中选择要创建索引的表所在的数据库名称,单击任务板中的数据库名称,单击任务板中的“向导向导”选项卡,出现选择向导界选项卡,出现选择向导界面,选择面,选择“创建索引创建索引”向导。向导。2 2直接创建索引直接创建索引v选择要创建索引的表,单击右键,从快捷菜单中选择选择要创建索引的表,单击右键,从快捷菜单中选择“所有任所有任务务”子菜单中的子菜单中的“管理索引管理索引”选项,将会出现选项,将会出现 “管理索引管理索引”对对话框,其中列出了表中已经存在的索引。话框,其中列出了表中已经存在的索引。v选择选择“新建新建”按钮,进入按钮,进入“创建索引创建索引”对话框。在其中输入要对话框。在其中输入要创建的索引的名称,再选择用于创建索引的列,并设置索引的各创建的索引的名称,再选择用于创建索引的列,并设置索引的各种选项,单击种选项,单击“”按钮,完成索引的创建。按钮,完成索引的创建。1264.10.2查看与修改索引查看与修改索引4.10.2.14.10.2.1用用Enterprise Manager Enterprise Manager 查看和修改索引查看和修改索引若若想想在在Enterprise Enterprise Manager Manager 中中查查看看和和修修改改索索引引,其其方法是:方法是:1 1在在Enterprise Enterprise Manager Manager 的的左左侧侧窗窗格格中中,展展开开要要为为其其创创建建索索的表所在的数据库,然后单击的表所在的数据库,然后单击“表表”项目。项目。2 2在在Enterprise Enterprise Manager Manager 的的右右侧侧窗窗格格中中,在在要要为为其其创创建建索索引引的的表表名名上上面面单单击击右右键键,此此时时出出现现快快捷捷菜菜单单,用用鼠鼠标标指指向向快快捷捷菜菜单单中中的的“所所有有任任务务”菜菜单单项项,此此时时,出出现现下下一一级级子子菜菜,从从中中单单击击 “管理索引管理索引”菜单项,菜单项, 则会出现则会出现 “管理索引管理索引”对话框。对话框。v在在此此对对话话框框中中,显显示示了了当当前前表表上上所所建建立立的的各各个个索索引引的的名名称称及及有有关的索引类型:关的索引类型:q若想增加新的索引,则单击“新建”按钮;q若想修改现有的某个索引,则可单击该索引,然后再单击“编辑”按钮;q若想删除现有的某个索引,则可先单击它,然后再单击“删除”按钮。 1274.10.2.24.10.2.2用存储过程用存储过程Sp_helpindex Sp_helpindex 查看索引查看索引Sp_helpindex Sp_helpindex 存存储储过过程程可可以以返返回回表表的的所所有有索索引引的的信信息。其语法如下:息。其语法如下:sp_helpindex objname = namesp_helpindex objname = nameq其中,objname = name子句指定当前数据库中的表的名称。如:如:查看表查看表StudentStudent的索引。的索引。exec sp_helpindex Studentexec sp_helpindex Student4.10.2.34.10.2.3用存储过程用存储过程Sp_rename Sp_rename 更改索引名称更改索引名称sp_rename sp_rename 存存储储过过程程可可以以更更改改索索引引的的名名称称。其其语语法法如如下:下:sp_rename sp_rename 数据表名数据表名. .原索引名原索引名, , 新索引名新索引名如:如:更改更改StudentStudent表中的索引表中的索引s_no s_no 名称为名称为stu_nostu_no。exec sp_rename Student.s_no, stu_no, indexexec sp_rename Student.s_no, stu_no, index1284.10.3删除索引删除索引4.10.3.14.10.3.1用用Enterprise Manager Enterprise Manager 删除索引删除索引在在Enterprise Enterprise Manager Manager 中中可可以以从从 “索索引引管管理理”对对话话框框或或表表的的属属性性对对话话框框中中选选择择要要删删除除的的索索引引,再选择再选择“删除删除”按钮来删除索引。按钮来删除索引。4.10.3.24.10.3.2用用DROP INDEX DROP INDEX 命令删除索引命令删除索引DROP DROP INDEX INDEX 命命令令可可以以删删除除一一个个或或多多个个当当前前数数据库中的索引。其语法如下:据库中的索引。其语法如下:DROP INDEX tablename.indexname ,.nDROP INDEX tablename.indexname ,.nqDROP INDEX 命令不能删除由CREATE TABLE 或ALTER TABLE 命令创建的PRIMARY KEY 或UNIQUE 约束索引,也不能删除系统表中的索引。如:如:删除表删除表StudentStudent中的索引中的索引s_nos_no。drop index Student.s_no_indexdrop index Student.s_no_index1294.11数据完整性数据完整性4.11.1数据完整性概述数据完整性概述数数据据完完整整性性(DataIntegrity)是是指指数数据据的的精精确确性性和和可可靠性靠性。它它是是应应防防止止数数据据库库中中存存在在不不符符合合语语义义规规定定的的数数据据和和防防止止因因错错误误信信息息的的输输入入输输出出造造成成无无效效操操作作或或错错误误信信息息而而提提出的。出的。数据完整性分为四类:数据完整性分为四类:v实体完整性(实体完整性(Entity IntegrityEntity Integrity)v域完整性(域完整性(Domain IntegrityDomain Integrity)v参照完整性(参照完整性(Referential IntegrityReferential Integrity)v用户定义的完整性(用户定义的完整性(User-defined IntegrityUser-defined Integrity)。)。SQLServer提供了一些提供了一些工具来工具来帮助用户实现数据完整帮助用户实现数据完整性,其中最主要的是性,其中最主要的是规则规则、默认默认、约束约束和和触发器触发器。1304.11.2规则规则规则(规则(Rule)就是数据库中对存储在表的列或用户自就是数据库中对存储在表的列或用户自定义数据类型中的值的规定和限制。定义数据类型中的值的规定和限制。规则是单独存储的独立的规则是单独存储的独立的数据库对象数据库对象。规则与其作用的表或用户自定义数据类型是规则与其作用的表或用户自定义数据类型是相互独立相互独立的,即表或用户自定义对象的删除、修改不会对与之相的,即表或用户自定义对象的删除、修改不会对与之相连的规则产生影响。连的规则产生影响。规则和约束可以同时使用,表的列可以有一个规则及规则和约束可以同时使用,表的列可以有一个规则及多个多个CHECK 约束。约束。规则与规则与CHECK 约束约束很相似。很相似。相比之下,使用在相比之下,使用在ALTER TABLE 或或CREATE TABLE 命令中的命令中的CHECK 约束是更标准的限制列值的方约束是更标准的限制列值的方法,但法,但CHECK 约束不能直接作用于用户自定义数据类型。约束不能直接作用于用户自定义数据类型。1314.11.2.14.11.2.1创建规则创建规则1 1用用CREATE RULE CREATE RULE 命令创建规则命令创建规则CREATE CREATE RULE RULE 命命令令用用于于在在当当前前数数据据库库中中创创建建规规则则,其其语法如下:语法如下:CREATE RULE rule_name AS condition_expressionCREATE RULE rule_name AS condition_expression其中:其中:v rule_name rule_name 是规则的名称是规则的名称v condition_expression condition_expression 子子句句是是规规则则的的定定义义,它它可可以以是是能能用用于于WHERE WHERE 条条件件子子句句中中的的任任何何表表达达式式,可可包包含含算算术术运运算算符符、关关系系运运算算符和谓词(如符和谓词(如ININ、LIKELIKE、BETWEEN BETWEEN 等)。等)。qcondition_expression 子句中的表达式必须以字符 开头如:如:创建学生年龄规则创建学生年龄规则。create rule age_rulecreate rule age_ruleas age = 18 and age = 18 and age = 501322 2用用Enterprise Manager Enterprise Manager 创建规则创建规则v在在Enterprise Manager Enterprise Manager 的左侧窗格中,展开要创建的左侧窗格中,展开要创建规则的数据库(如:规则的数据库(如:StudyStudy)目录。)目录。v在数据库的对象在数据库的对象“规则规则”上面单击右键,此时出现上面单击右键,此时出现一快捷菜单,从快捷菜单中单击一快捷菜单,从快捷菜单中单击“新建规则新建规则”菜单项,菜单项,则会弹出则会弹出“规则属性规则属性”对话框。对话框。v在此对话框中的在此对话框中的“名称名称”对应的文本框中输入要创对应的文本框中输入要创建的规则的名称(如:建的规则的名称(如:age_ruleage_rule),在),在“文本文本”对应对应的文本框中输入规则的内容(即约束的条件)。的文本框中输入规则的内容(即约束的条件)。v在输入完规则名称和规则的内容之后,单击在输入完规则名称和规则的内容之后,单击“确定确定”按钮即完成规则的创建。按钮即完成规则的创建。1334.11.2.24.11.2.2查看规则查看规则1 1用用Enterprise Manager Enterprise Manager 查看规则查看规则v在在Enterprise Enterprise Manager Manager 的的左左侧侧窗窗格格中中,展展开开要要创创建建规规则则的的数数据据库库(如如:StudyStudy)目目录录,在在数数据据库库的的对对象象“规规则则”上上面面单单击击,即即可可在在其其右右边边的的任任务务板板中中看看到到规规则则的的大大部部分分信信息息,包包括括规规则则的的名名称称、所所有有者者和和创创建建时时间间等。等。v要要查查看看规规则则的的内内容容,方方法法是是,选选择择要要查查看看的的规规则则,单单击击右右键键,从从快快捷捷菜菜单单中中选选择择“属属性性”选选项项,即即会会出出现现“规则属性规则属性”对话框,可以从中编辑规则的表达式。对话框,可以从中编辑规则的表达式。v如果要修改规则的名称可以通过如果要修改规则的名称可以通过Sp_renameSp_rename 系统存系统存储过程进行,也可以直接用右键单击要修改的规则,储过程进行,也可以直接用右键单击要修改的规则,从快捷菜单中选择从快捷菜单中选择“重命名重命名”菜单项,进行名称修改。菜单项,进行名称修改。1342 2用存储过程用存储过程Sp_helptext Sp_helptext 查看规则查看规则使使用用Sp_helptextSp_helptext 存存储储过过程程可可以以查查看看规规则则的的细细节,其语法如下:节,其语法如下:sp_helptext objname = namesp_helptext objname = nameq其中,objname = name子句指明对象的名称q用Sp_helptext 存储过程查看的对象可以是当前数据库中的规则、默认、触发器、视图或未加密的存储过程。如:如:查看名称为查看名称为“age_ruleage_rule”的规则内容。的规则内容。EXEC sp_helptext age_ruleEXEC sp_helptext age_rule1354.11.2.34.11.2.3规则的绑定与松绑规则的绑定与松绑创建规则后,规则仅仅只是一个存在于数据库创建规则后,规则仅仅只是一个存在于数据库中的对象,并未发生作用。中的对象,并未发生作用。需要将规则与数据库表或用户自定义对象联系需要将规则与数据库表或用户自定义对象联系起来,才能达到创建规则的目的。起来,才能达到创建规则的目的。联系的方法称为联系的方法称为“绑定绑定”。所谓所谓绑定绑定就是指定规则作用于哪个表的哪一列就是指定规则作用于哪个表的哪一列或哪个用户自定义数据类型。或哪个用户自定义数据类型。表的一列或一个用户自定义数据类型只能与一表的一列或一个用户自定义数据类型只能与一个规则相绑定,而一个规则可以绑定多对象,这个规则相绑定,而一个规则可以绑定多对象,这正是规则的魅力所在。正是规则的魅力所在。解除规则与对象的绑定称为解除规则与对象的绑定称为“松绑松绑”。1361 1用存储过程用存储过程Sp_bindrule Sp_bindrule 绑定规则绑定规则存存储储过过程程Sp_bindrule Sp_bindrule 可可以以绑绑定定一一个个规规则则到到表表的的一一个个列或一个用户自定义数据类型上。其语法如下:列或一个用户自定义数据类型上。其语法如下:sp_bindrule rulename = rule,sp_bindrule rulename = rule,objname = object_nameobjname = object_name, futureonly, futureonly各参数说明如下:各参数说明如下:(1 1)rulename = rulerulename = ruleq指定规则名称。(2 2)objname = object_nameobjname = object_nameq指定规则绑定的对象。(3 3)futureonlyfutureonlyq此选项仅在绑定规则到用户自定义数据类型上时才可以使用。q当指定此选项时,仅以后使用此用户自定义数据类型的列会应用新规则,而当前已经使用此数据类型的列则不受影响。 137如:如:绑定规则绑定规则age_rule age_rule 到到s s表的字段表的字段ageage。EXEC sp_bindrule age_rule, s.ageEXEC sp_bindrule age_rule, s.age注:注:规则对已经输入表中的数据不起作用。规则对已经输入表中的数据不起作用。规规则则所所指指定定的的数数据据类类型型必必须须与与所所绑绑定定的的对对象象的的数数据据类类型型一一致致,且且规规则则不不能能绑绑定定一一个个数数据据类类型型为为TEXTTEXT、IMAGEIMAGE或或TIMESTAMP TIMESTAMP 的列。的列。与与表表的的列列绑绑定定的的规规则则优优先先于于与与用用户户自自定定义义数数据据类类型型绑绑定定的的列列。因因此此,如如果果表表的的列列的的数数据据类类型型与与规规则则A A 绑绑定定,同时列又与规则同时列又与规则B B 绑定,则以规则绑定,则以规则B B 为列的规则。为列的规则。可可以以直直接接用用一一个个新新的的规规则则来来绑绑定定列列或或用用户户自自定定义义数数据据类类型型,而而不不需需要要先先将将其其原原来来绑绑定定的的的的规规则则解解除除,系系统统会会将旧规则覆盖。将旧规则覆盖。1382 2用用存存储储过过程程Sp_unbindrule Sp_unbindrule 解解除除规规则则的的绑绑定定存存储储过过程程Sp_unbindrule Sp_unbindrule 可可解解除除规规则则与与列列或或用用户自定义数据类型的绑定,其语法如下:户自定义数据类型的绑定,其语法如下:sp_unbindrule objname = object_namesp_unbindrule objname = object_name,futureonly,futureonly其中:其中:vfutureonlyfutureonly选选项项同同绑绑定定时时一一样样,仅仅用用于于用用户户自自定定义义数数据据类类型型,它它指指定定现现有有的的用用此此用用户户自自定定义义数数据据类类型定义的列仍然保持与此规则的绑定。型定义的列仍然保持与此规则的绑定。v如如果果不不指指定定此此项项,所所有有由由此此用用户户自自定定义义数数据据类类型型定定义的列也将随之解除与此规则的绑定。义的列也将随之解除与此规则的绑定。如:如:要解除已绑定到要解除已绑定到s s表的字段表的字段ageage的规则的规则age_ruleage_rule。EXEC sp_unbindrule s.ageEXEC sp_unbindrule s.age1393 3用用Enterprise Manager Enterprise Manager 管理规则的绑定管理规则的绑定v在在Enterprise Manager Enterprise Manager 的左侧窗格中,展开相应的的左侧窗格中,展开相应的数据库(如:数据库(如:StudyStudy)目录)目录v在数据库的对象在数据库的对象“规则规则”上面单击,即可在其右边上面单击,即可在其右边的任务板中看到已创建的规则名称的任务板中看到已创建的规则名称v在相应的规则名称上面单击右键,从快捷菜单中选在相应的规则名称上面单击右键,从快捷菜单中选择择“属性属性”选项选项v会出现会出现“规则属性规则属性”对话框,该对话框中的对话框,该对话框中的“绑定绑定UDTsUDTs”按钮用于将规则绑定到用户自定义数据类型,按钮用于将规则绑定到用户自定义数据类型,“绑定列绑定列”按钮用于将规则绑定到表的列。按钮用于将规则绑定到表的列。140v在在“规则属性规则属性”对话框中,单击对话框中,单击“绑定绑定UDTsUDTs”按钮,按钮,则出现则出现“绑定规则到用户自定义数据类型绑定规则到用户自定义数据类型”的对话框,的对话框,单击单击“绑定列绑定列”按钮则出现按钮则出现“绑定规则到表的列绑定规则到表的列”的的对话框对话框v在在该该对对话话框框中中,在在“表表”所所对对应应的的下下拉拉列列表表中中,选选择择相相应应的的数数据据表表(如如:数数据据表表S S),在在“未未绑绑定定的的列列”列列表表中中单单击击要要绑绑定定到到的的某某个个列列(如如:AGEAGE),然然后后单单击击“添添加加”按按钮钮,将将该该列列添添加加到到“绑绑定定列列”中中,最最后后单单击击“确确定定”按按钮钮,这这时时规规则则就就被被绑绑定定到到所所选选定定的的列列上上了。了。1414.11.2.44.11.2.4删除规则删除规则1 1用用Enterprise Manager Enterprise Manager 删除规则删除规则v在在Enterprise Enterprise Manager Manager 的的左左侧侧窗窗格格中中,展展开开相相应应的的数数据据库库(如如:StudyStudy)目录)目录v在在数数据据库库的的对对象象“规规则则”上上面面单单击击,即即可可在在其其右右边边的的任任务务板板中中看到已创建的规则名称看到已创建的规则名称v在在相相应应的的规规则则名名称称上上面面单单击击右右键键,从从快快捷捷菜菜单单中中选选择择“删删除除”菜单项菜单项v会会出出现现“除除去去对对象象”对对话话框框,在在该该对对话话框框中中单单击击“全全部部移移去去”按钮。按钮。 2 2使用使用DROP RULEDROP RULE命令删除规则命令删除规则使使用用DROP DROP RULE RULE 命命令令删删除除当当前前数数据据库库中中的的一一个个或或多多个个规则。其语法如下:规则。其语法如下:DROP RULE rule_name ,.nDROP RULE rule_name ,.n注注:在在删删除除一一个个规规则则前前必必须须先先将将与与其其绑绑定定的的对对象象解解除除绑定绑定如:如:删除删除age_ruleage_rule规则规则, ,可执行以下命令:可执行以下命令:DROP RULE age_ruleDROP RULE age_rule1424.11.34.11.3默认默认默默认认(DefaultDefault)是是往往用用户户输输入入记记录录时时没没有有指指定定具具体体数据的列中自动插入的数据。数据的列中自动插入的数据。默默认认对对象象与与ALTER ALTER TABLE TABLE 或或CREATE CREATE TABLE TABLE 命命令令操操作作表表时时用用DEFAULTDEFAULT 选选项项指指定定的的默默认认功功能能相相似似,但但默默认认对对象象可可以以用用于于多多个个列列或或用用户户自自定定义义数数据据类类型型,它它的的管管理理与与应应用同规则有许多相似之处。用同规则有许多相似之处。表表的的一一列列或或一一个个用用户户自自定定义义数数据据类类型型也也只只能能与与一一个个默默认相绑定。认相绑定。4.11.3.14.11.3.1创建默认创建默认1 1用用CREATE DEFAULT CREATE DEFAULT 命令创建默认命令创建默认CREATE DEFAULT CREATE DEFAULT 命令用于在当前数据库中创建默认对象,其语法如下:命令用于在当前数据库中创建默认对象,其语法如下:CREATE DEFAULT default_name AS constant_expressionCREATE DEFAULT default_name AS constant_expression其中其中vdefault_namedefault_name是要创建的默认的名称是要创建的默认的名称vconstant_expression constant_expression 子子句句是是默默认认的的定定义义,该该子子句句可可以以是是数数学学表达式或函数,也可以包含表的列名或其它数据库对象。表达式或函数,也可以包含表的列名或其它数据库对象。143如:如:创建出生日期默认创建出生日期默认birthday_defabirthday_defa。CREATEDEFAULTbirthday_defaas1978-1-1这样,当用户在输入记录数据时,未提供字段这样,当用户在输入记录数据时,未提供字段birthdaybirthday的值时,系统将自动默认其值为的值时,系统将自动默认其值为“1978-1-11978-1-1”。1442 2用用Enterprise Manager Enterprise Manager 创建默认创建默认v在在Enterprise Manager Enterprise Manager 的左侧窗格中,展开相应的的左侧窗格中,展开相应的数据库(如:数据库(如:StudyStudy)目录)目录v在数据库的对象在数据库的对象“默认默认”上面单击右键,从出现的上面单击右键,从出现的快捷菜单中选择快捷菜单中选择“新建默认新建默认”菜单项菜单项v即会弹出即会弹出“默认属性默认属性”对话框,在该对话框中的对话框,在该对话框中的“名称名称”文本框中输入要创建的默认的名称(如:文本框中输入要创建的默认的名称(如:birthday_defabirthday_defa),在),在“值值”文本框中输入默认的值文本框中输入默认的值v单击单击“确定确定”按钮,即完成默认的创建按钮,即完成默认的创建1454.11.3.24.11.3.2查看和修默认查看和修默认1 1用用Enterprise Manager Enterprise Manager 查看默认查看默认v在在Enterprise Enterprise Manager Manager 的的左左侧侧窗窗格格中中,展展开开相相应应的的数数据据库库(如如:StudyStudy)目录)目录v在在数数据据库库的的对对象象“默默认认”上上面面单单击击,这这时时在在右右侧侧窗窗格格中中的的任任务务板中即可看到已建立的各个默认的信息板中即可看到已建立的各个默认的信息v在在某某个个默默认认的的名名称称上上面面单单击击右右键键,从从快快捷捷菜菜单单中中选选择择“属属性性”菜单项,即会出现菜单项,即会出现“默认属性默认属性”对话框,可以从中编辑默认的值。对话框,可以从中编辑默认的值。修修改改默默认认名名称称的的方方法法与与修修改改规规则则名名称称的的方方法法相相同同,可可以以用用SP_RENAMESP_RENAME存存储储过过程程修修改改,也也可可以以在在企企业业管管理理器器的的任任务板窗口中直接修改。务板窗口中直接修改。2 2用存储过程用存储过程SP_HELPTEXT SP_HELPTEXT 查看默认查看默认使用使用SP_HELPTEXTSP_HELPTEXT存储过程可以查看默认的细节。存储过程可以查看默认的细节。如:如:查看默认查看默认birthday_defabirthday_defa。EXEC SP_HELPTEXT birthday_defaEXEC SP_HELPTEXT birthday_defa1464.11.3.34.11.3.3默认的绑定与松绑默认的绑定与松绑创创建建默默认认后后,默默认认仅仅仅仅只只是是一一个个存存在在于于数数据据库库中中的的对对象象,并并未未发发生作用。生作用。同规则一样,需要将默认与数据库表或用户自定义对象同规则一样,需要将默认与数据库表或用户自定义对象绑定绑定。1 1用用Enterprise Manager Enterprise Manager 管理默认的绑定管理默认的绑定v在在Enterprise Manager Enterprise Manager 的左侧窗格中,展开相应的数据库(如:的左侧窗格中,展开相应的数据库(如:StudyStudy)目录)目录v在数据库的对象在数据库的对象“默认默认”上面单击,这时在右侧窗格中的任务上面单击,这时在右侧窗格中的任务板中即可看到已建立的各个默认的信息板中即可看到已建立的各个默认的信息v在某个默认的名称上面单击右键,从快捷菜单中选择在某个默认的名称上面单击右键,从快捷菜单中选择“属性属性”菜单项,即会出现菜单项,即会出现“默认属性默认属性”对话框对话框v对话框中的对话框中的“绑定绑定UDTUDT”按钮用于将默认绑定到用户自定义数据按钮用于将默认绑定到用户自定义数据类型,类型,“绑定列绑定列”按钮用于将默认绑定到某个数据表的列。按钮用于将默认绑定到某个数据表的列。v单击单击“绑定绑定UDTUDT”按钮,则出现按钮,则出现“绑定默认到用户自定义数据类绑定默认到用户自定义数据类型型”的对话框;单击的对话框;单击“绑定列绑定列”按钮,则出现按钮,则出现“绑定默认到表的绑定默认到表的列列”的对话框。的对话框。v用它们来管理默认与表的列以及用户自定义数据类型之间的绑用它们来管理默认与表的列以及用户自定义数据类型之间的绑定非常方便。定非常方便。v此方法与绑定规则到用户自定义类型和表的列的方法完全一致。此方法与绑定规则到用户自定义类型和表的列的方法完全一致。1472 2用存储过程用存储过程Sp_binddefault Sp_binddefault 绑定默认绑定默认存存储储过过程程Sp_bindefault Sp_bindefault 可可以以绑绑定定一一个个默默认认到到表表的的一一个列或一个用户自定义数据类型上。其语法如下:个列或一个用户自定义数据类型上。其语法如下:SP_BINDEFAULT defname = default,SP_BINDEFAULT defname = default,objname = object_nameobjname = object_name, futureonly, futureonly其中:其中:vfutureonlyfutureonly选选项项仅仅在在绑绑定定默默认认到到用用户户自自定定义义数数据据类类型型上上时时才可以使用。才可以使用。v当当指指定定此此选选项项时时,仅仅以以后后使使用用此此用用户户自自定定义义数数据据类类型型的的列列会会应应用新默认,而当前已经使用此数据类型的列则不受影响。用新默认,而当前已经使用此数据类型的列则不受影响。如:如:绑定默认绑定默认birthday_defabirthday_defa到数据表到数据表s s的的birthdaybirthday列上。列上。EXEC SP_BINDEFAULT birthday_defa, s.birthdayEXEC SP_BINDEFAULT birthday_defa, s.birthday1483 3用存储过程用存储过程Sp_unbindefault Sp_unbindefault 解除默认的绑定解除默认的绑定存存储储过过程程SP_UNBINDEFAULT SP_UNBINDEFAULT 可可以以解解除除默默认认与与表表的的列列或或用户自定义数据类型的绑定,其语法如下:用户自定义数据类型的绑定,其语法如下:SP_UNBINDEFAULT objname = object_nameSP_UNBINDEFAULT objname = object_name,futureonly,futureonly其中:其中:vfutureonlyfutureonly选选项项同同绑绑定定时时一一样样,仅仅用用于于用用户户自自定定义义数数据据类类型型它它指指定定现现有有的的用用此此用用户户自自定定义义数数据据类类型型定定义义的的列列仍仍然然保保持持与与此此默认的绑定。默认的绑定。v如如果果不不指指定定此此项项,所所有有由由此此用用户户自自定定义义数数据据类类型型定定义义的的列列也也将将随之解除与此默认的绑定。随之解除与此默认的绑定。如:如:解除默认解除默认birthday_defabirthday_defa与表与表s s的的birthdaybirthday列的绑定。列的绑定。EXEC SP_UNBINDEFAULT s.birthdayEXEC SP_UNBINDEFAULT s.birthday注:注:v如果列同时绑定了一个规则和一个默认那么默认应该符合规则如果列同时绑定了一个规则和一个默认那么默认应该符合规则的规定。的规定。v不能绑定默认到一个用不能绑定默认到一个用CREATE TABLE CREATE TABLE 或或ALTER TABLE ALTER TABLE 命令创建命令创建或修改表时用或修改表时用DEFAULT DEFAULT 选项指定了的默认的列上。选项指定了的默认的列上。1494.11.3.44.11.3.4删除默认删除默认1 1用用Enterprise Manager Enterprise Manager 删除默认删除默认v在在Enterprise Enterprise Manager Manager 的的左左侧侧窗窗格格中中,展展开开相相应应的的数数据据库库(如如:StudyStudy)目录)目录v在在数数据据库库的的对对象象“默默认认”上上面面单单击击,这这时时在在右右侧侧窗窗格格的的任任务务板板中即可看到已建立的各个默认的信息中即可看到已建立的各个默认的信息v在在某某个个默默认认的的名名称称上上面面单单击击右右键键,从从快快捷捷菜菜单单中中选选择择“删删除除”菜菜单单项项,即即会会出出会会出出现现“除除去去对对象象”对对话话框框,在在该该对对话话框框中中单单击击“全部移去全部移去”按钮。按钮。 2 2使用使用DROP DEFAULTDROP DEFAULT命令删除认命令删除认使使用用DROP DROP DEFAULT DEFAULT 命命令令删删除除当当前前数数据据库库中中的的一一个个或或多个默认。其语法如下:多个默认。其语法如下:DROP DEFAULT default_name ,.nDROP DEFAULT default_name ,.n如:如:删除学生生日默认删除学生生日默认birthday_defabirthday_defa。DROPDROPDEFAULT birthday_defaDEFAULT birthday_defa在删除一个默认前必须先将与其绑定的对象解除绑定在删除一个默认前必须先将与其绑定的对象解除绑定1504.12数据查询数据查询数数据据库库是是为为更更方方便便有有效效地地管管理理信信息息而而存存在在的的,人人们们希希望望数数据库可以随时提供所需要的数据信息。据库可以随时提供所需要的数据信息。因此,对用户来说,因此,对用户来说,数据查询数据查询是数据库最重要的功能。是数据库最重要的功能。在在数数据据库库中中数数据据查查询询是是通通过过SELECT SELECT 语语句句来来完完成成的的。SELECT SELECT 语语句句可可以以从从数数据据库库中中按按用用户户要要求求检检索索数数据据,并并将将查查询询结果以表格的形式返回。结果以表格的形式返回。关关于于SELECTSELECT语语句句的的使使用用以以及及各各种种查查询询情情况况已已在在第第3 3章章中中详详细细介介绍绍过过,在在此此只只介介绍绍将将查查询询结结果果存存储储到到数数据据表表中中的的变变量量中中的的情情况。况。在在某某些些时时候候,我我们们需需要要在在程程序序中中使使用用查查询询的的结结果果,如如在在编编写写存存储储过过程程或或触触发发器器时时,这这时时就就需需要要将将查查询询结结果果存存储储到到变变量量中中去。去。如如:查查询询学学号号为为s1s1的的学学生生的的学学号号与与姓姓名名,并并存存储储到到变量变量snosno和和snsn中。中。 DECLARE sno varchar(10) DECLARE sn varchar(10) DECLARE sno varchar(10) DECLARE sn varchar(10) SELECT sno = sno,sn = sn FROM s WHERE sno = s1SELECT sno = sno,sn = sn FROM s WHERE sno = s11514.134.13存储过程和触发器存储过程和触发器 在大型数据库系统中,存储过程和触发器具有在大型数据库系统中,存储过程和触发器具有很重要的作用。很重要的作用。无论是存储过程还是触发器,都是无论是存储过程还是触发器,都是SQL SQL 语句语句和和流程控制语句流程控制语句的集合。的集合。就本质而言,触发器也是一种存储过程。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。对其再运行时其执行速度很快。SQL Server 2000 SQL Server 2000 不仅提供了不仅提供了用户自定义存储用户自定义存储过程过程的功能,而且也提供了许多可作为工具使用的功能,而且也提供了许多可作为工具使用的的系统存储过程系统存储过程。1524.13.1 4.13.1 存储过程概述存储过程概述存存储储过过程程(Stored Stored ProcedureProcedure)是是一一组组为为了了完完成成特特定定功功能能的的SQL SQL 语语句句集集,经经编编译译后后存存储储在在数数据据库中。库中。用用户户通通过过指指定定存存储储过过程程的的名名字字并并给给出出参参数数(如如果该存储过程带有参数)来执行它。果该存储过程带有参数)来执行它。在在SQL Server SQL Server 的系列版本中存储过程分为两的系列版本中存储过程分为两类:类:v系统提供的存储过程系统提供的存储过程v用户自定义存储过程用户自定义存储过程153系统过程系统过程主要存储在主要存储在master master 数据库中并以数据库中并以sp_sp_为前缀,为前缀,并且系统存储过程主要是从系统表中获取信息,从而为并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理系统管理员管理SQL Server SQL Server 提供支持。提供支持。通过系统存储过程,通过系统存储过程,SQL Server SQL Server 中的许多管理性或中的许多管理性或信息性的活动(如了解数据库对象、数据库信息)都可信息性的活动(如了解数据库对象、数据库信息)都可以被顺利有效地完成。以被顺利有效地完成。尽管这些系统存储过程被放在尽管这些系统存储过程被放在master master 数据库中,但数据库中,但是仍可以在其它数据库中对其进行调用,在调用时不必是仍可以在其它数据库中对其进行调用,在调用时不必在存储过程名前加上数据库名。在存储过程名前加上数据库名。而且当创建一个新数据库时,一些系统存储过程会在而且当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。新数据库中被自动创建。用户自定义存储过程用户自定义存储过程是由用户创建并能完成某一特定是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程。功能(如查询用户所需数据信息)的存储过程。1544.13.2创建存储过程创建存储过程在在SQL Server 2000 SQL Server 2000 中创建一个存储过程有两种方法:中创建一个存储过程有两种方法:v一种是使用一种是使用Transaction-SQLTransaction-SQL命令命令Create ProcedureCreate Procedure,v另一种是使用图形化管理工具另一种是使用图形化管理工具Enterprise ManagerEnterprise Manager。v用用Transaction-SQL Transaction-SQL 创建存储过程是一种较为快速的方法,创建存储过程是一种较为快速的方法,v但但对对于于初初学学者者,使使用用Enterprise Enterprise Manager Manager 更更易易理理解解,更更为为简简单。单。当创建存储过程时,需要确定存储过程的三个组成部分:当创建存储过程时,需要确定存储过程的三个组成部分:v1 1所有的输入参数以及传给调用者的输出参数所有的输入参数以及传给调用者的输出参数v2 2被被执执行行的的针针对对数数据据库库的的操操作作语语句句包包括括调调用用其其它它存存储储过过程程的的语句语句v3 3返回给调用者的状态值以指明调用是成功还是失败返回给调用者的状态值以指明调用是成功还是失败利用利用“向导向导”1554.13.2.1用用CREATE PROCEDURE CREATE PROCEDURE 命令创建存储过程命令创建存储过程通通过过运运用用Create Create Procedure Procedure 命命令令能能够够创创建建存存储储过过程程,在创建存储过程之前应该考虑到以下几个方面:在创建存储过程之前应该考虑到以下几个方面:1 1在在一一个个批批处处理理中中Create Create Procedure Procedure 语语句句不不能能与与其其它它SQL SQL 语语句合并在一起。句合并在一起。2 2数数据据库库所所有有者者具具有有默默认认的的创创建建存存储储过过程程的的权权限限它它可可把把该该权权限限传递给其它的用户。传递给其它的用户。3 3存储过程作为数据库对象其命名必须符合命名规则。存储过程作为数据库对象其命名必须符合命名规则。4 4只能在当前数据库中创建属于当前数据库的存储过程。只能在当前数据库中创建属于当前数据库的存储过程。如如:在在teachteach数数据据库库中中,创创建建一一个个名名称称为为myprocmyproc的的存存储储过过程程,该该存存储储过过程程的的功功能能是是从从数数据据表表s s中中查查询询所所有有男男同同学的信息。学的信息。GOCREATEPROCEDUREmyprocASSELECT*FROMsWHEREsex=男男GO156定义具有参数的存储过程。定义具有参数的存储过程。如如 : 在在 teachteach数数 据据 库库 中中 , 创创 建建 一一 个个 名名 称称 为为InsertRecordInsertRecord的的存存储储过过程程,该该存存储储过过程程的的功功能能是是向向数数据据表表s s中插入一条记录,新记录的值由参数提供。中插入一条记录,新记录的值由参数提供。USE teachUSE teachGOGOCREATE PROCEDURE InsertRecord CREATE PROCEDURE InsertRecord ( (sno char(6),sno char(6),sn char(20),sn char(20),age numeric(5),age numeric(5),sex char(2),sex char(2),dept char(10)dept char(10) )ASASINSERT INTO s VALUES(sno,sn,sex,age,dept)INSERT INTO s VALUES(sno,sn,sex,age,dept)GOGO157定义具有参数默认值的存储过程。定义具有参数默认值的存储过程。如如 : 在在 teachteach数数 据据 库库 中中 , 创创 建建 一一 个个 名名 称称 为为InsertRecordDefaInsertRecordDefa的的存存储储过过程程,该该存存储储过过程程的的功功能能是是向向数数据据表表s s中中插插入入一一条条记记录录,新新记记录录的的值值由由参参数数提提供供,如如果果未提供系别未提供系别deptdept的值时,由参数的默认值代替。的值时,由参数的默认值代替。USEteachGOCREATEPROCEDUREInsertRecordDefa(snochar(6),snchar(20),agenumeric(5),sexchar(2),deptchar(10)=无无)ASINSERTINTOsVALUES(sno,sn,sex,age,dept)GO158定义能够返回值的存储过程。定义能够返回值的存储过程。如如:在在teachteach数数据据库库中中,创创建建一一个个名名称称为为Query_StudyQuery_Study的的存存储储过过程程,该该存存储储过过程程的的功功能能是是从从数数据据表表s s中中根根据据学学号号查询某一同学的姓名和系别。查询某一同学的姓名和系别。USE teachUSE teachGOGOCREATE PROCEDURE Query_Study CREATE PROCEDURE Query_Study ( (sno char(6),sno char(6),sn char(20) OUTPUT,sn char(20) OUTPUT,dept char(10) OUTPUTdept char(10) OUTPUT) )ASASSELECT sn=sn,dept=deptSELECT sn=sn,dept=deptFROM sFROM sWHERE sno=snoWHERE sno=snoGOGO1594.13.2.2使使用用Enterprise Enterprise Manager Manager 创创建建存存储储过过程程1 1启动启动Enterprise ManagerEnterprise Manager,登录到要使用的服务器。,登录到要使用的服务器。2 2在在Enterprise Enterprise ManagerManager的的左左窗窗格格中中,展展开开要要创创建建存存储储过过程程的的数数据据库库文文件件夹夹,单单击击“存存储储过过程程”文文件件夹夹,此此时在右窗格中显示该数据库的所有存储过程。时在右窗格中显示该数据库的所有存储过程。3 3用用右右键键单单击击“存存储储过过程程”文文件件夹夹,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“新新建建存存储储过过程程”, ,此此时时打打开开“新新建建存存储储过过程程”对话框。对话框。4 4在在“文本文本”编辑框中输入存储过程的正文内容。编辑框中输入存储过程的正文内容。5 5单击单击“检查语法检查语法”按钮,检查语法是否正确。按钮,检查语法是否正确。6 6单击单击“确定确定”,保存。,保存。4.4.在在右右窗窗格格中中,右右击该存存储过程程,在在弹出出菜菜单中中选择“所有任所有任务”, , 选择“管理管理权限限”设置置权限。限。 1604.13.3.14.13.3.1查看存储过程查看存储过程存存储储过过程程被被创创建建以以后后,它它的的名名字字存存储储在在系系统统表表sysobjects sysobjects 中;中;它的它的源代码源代码存放在系统表存放在系统表syscommentssyscomments 中。中。可可以以通通过过SQL SQL Server Server 提提供供的的系系统统存存储储过过程程来来查查看看关关于用户创建的存储过程信息。于用户创建的存储过程信息。1 1通通过过Enterprise Enterprise Manager Manager 管管理理工工具具同同样样可可以以查查看看存储过程的源代码存储过程的源代码(1 1)启动)启动Enterprise Manager Enterprise Manager 登录到要使用的服务器。登录到要使用的服务器。(2 2)在在Enterprise Enterprise ManagerManager的的左左窗窗格格中中,展展开开要要创创建建存存储储过过程程的的数数据据库库文文件件夹夹,单单击击“存存储储过过程程”文文件件夹夹,此此时时在在右右窗窗格格中中显显示该数据库的所有存储过程。示该数据库的所有存储过程。(3 3)在在右右窗窗格格中中,右右击击要要查查看看源源代代码码的的存存储储过过程程,在在弹弹出出的的菜菜单中选择单中选择“属性属性”选项,此时便可看到存储过程的源代码。选项,此时便可看到存储过程的源代码。4.13.3管理存储过程管理存储过程1612 2使使用用sp_helptext sp_helptext 存存储储过过程程查查看看存存储储过过程程的的源代码源代码sp_helptext sp_helptext 存储过程名称存储过程名称如如:查查看看数数据据库库Study Study 中中存存储储过过程程myproc myproc 的的源源代码。代码。Exec sp_helptext myprocExec sp_helptext myproc如如果果在在创创建建存存储储过过程程时时使使用用了了WITH WITH ENCRYPTION ENCRYPTION 选选项项,那那么么无无论论是是使使用用Enterprise Enterprise Manager Manager 还还是是系系统统存存储储过过程程sp_helptext sp_helptext 都都无无法法查查看看到到存存储储过过程程的源代码。的源代码。1624.13.3.24.13.3.2重新命名存储过程重新命名存储过程修修改改存存储储过过程程的的名名字字使使用用系系统统存存储储过过程程sp_renamesp_rename,其命令格式为:,其命令格式为:sp_rename sp_rename 原存储过程名名原存储过程名名, , 新存储过程名新存储过程名如:如:将存储过程将存储过程myprocmyproc修改为修改为mynewprocmynewproc。sp_rename myproc, mynewprocsp_rename myproc, mynewproc另外,通过另外,通过Enterprise Manager Enterprise Manager 也可修改存也可修改存储过程的名字,其操作过程与储过程的名字,其操作过程与WindowsWindows下修改文下修改文件名字的操作类似。件名字的操作类似。v即首先选中需修改名字的存储过程即首先选中需修改名字的存储过程v然后右击鼠标,在弹出菜单中选取然后右击鼠标,在弹出菜单中选取“重命名重命名”选项选项v最后输入新存储过程的名字。最后输入新存储过程的名字。1634.13.3.34.13.3.3删除存储过程删除存储过程删删除除存存储储过过程程使使用用drop drop 命命令令,drop drop 命命令令可可将将一一个个或或多多个个存存储储过过程程或或者者存存储储过过程程组组从从当当前前数数据据库中删除。其语法规则为:库中删除。其语法规则为:DROP PROCEDURE procedure ,DROP PROCEDURE procedure ,nn如:如:将存储过程将存储过程mynewprocmynewproc从数据库中删除。从数据库中删除。drop procedure mynewprocdrop procedure mynewproc1644.13.3.44.13.3.4执行存储过程执行存储过程执行已创建的存储过程使用执行已创建的存储过程使用EXECUTE EXECUTE 命令命令如:如:执行数据库执行数据库teachteach中的存储过程中的存储过程myprocmyproc。EXECUTE myprocEXECUTE myproc如:如:执行数据库执行数据库teachteach中的存储过程中的存储过程InsertRecordInsertRecord。EXECUTEInsertRecordsno=S1,sn=王王大大利利,sex=男男,age=18,dept=计算机系计算机系如:如:执行数据库执行数据库teachteach中的存储过程中的存储过程InsertRecordDefaInsertRecordDefa。EXECUTE EXECUTE InsertRecordDefa InsertRecordDefa sno sno = = S10,sn S10,sn = = 高高平平, , sex = sex = 女女, age = 18, age = 18如:如:执行数据库执行数据库teachteach中的存储过程中的存储过程Query_StudyQuery_Study。DECLARE sn char(20)DECLARE sn char(20)DECLARE dept char(10)DECLARE dept char(10)EXECUTE Query_Study S10,sn OUTPUT,dept OUTPUTEXECUTE Query_Study S10,sn OUTPUT,dept OUTPUTSELECT SELECT 姓名姓名 =sn, =sn, 系别系别=dept=dept1654.13.4触发器概述触发器概述在上面,我们介绍了在上面,我们介绍了一般意义一般意义的存储过程,即用户自的存储过程,即用户自定义的存储过程和系统存储过程。定义的存储过程和系统存储过程。接下来将介绍一种接下来将介绍一种特殊特殊的存储过程,即触发器。的存储过程,即触发器。触发器主要是通过触发器主要是通过事件事件进行触发而被执行的,而存储进行触发而被执行的,而存储过程可以通过存储过程过程可以通过存储过程名字名字而被直接调用。而被直接调用。当对某一表进行诸如当对某一表进行诸如UPDATEUPDATE、NSERTNSERT、DELETE DELETE 这些操这些操作时,作时,SQL Server SQL Server 就会自动执行触发器所定义的就会自动执行触发器所定义的SQL SQL 语句。从而确保对数据的处理必须符合由这些语句。从而确保对数据的处理必须符合由这些SQL SQL 语语句所定义的规则。句所定义的规则。触发器的触发器的主要作用主要作用就是其能够实现由主键和外键所不就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能。除此之外,触发器还有其它许多不同的功能。1664.13.5创建触发器创建触发器4.13.5.1用用CREATETRIGGER命令创建触发器命令创建触发器如如:下下面面创创建建一一个个触触发发器器,当当向向表表s s中中插插入入一一条条记记录录时,自动显示表时,自动显示表s s中的记录。中的记录。CREATE TRIGGER Change_DisplayCREATE TRIGGER Change_DisplayON sON sFOR INSERT,UPDATE,DELETEFOR INSERT,UPDATE,DELETEASASSELECT * FROM sSELECT * FROM s该该触触发发器器建建立立完完毕毕后后,当当执执行行如如下下操操作作时时将将会会显显示示数数据表据表s s中的全部记录。中的全部记录。EXECUTE InsertRecordDefa sno = S11, sn = EXECUTE InsertRecordDefa sno = S11, sn = 张建峰张建峰, , age = 17, sex = age = 17, sex = 男男 1674.13.5.24.13.5.2用用管管理理工工具具Enterprise Enterprise Manger Manger 创创建建触触发发器器1 1启动启动Enterprise Manager Enterprise Manager 登录到要使用的服务器。登录到要使用的服务器。2 2在在Enterprise Enterprise ManagerManager的的左左窗窗格格中中,展展开开要要创创建建触触发发器器的的数数据据库库文文件件夹夹,单单击击“表表”文文件件夹夹,此此时时在在右右窗窗格格中中显显示示该该数数据据库库的所有表。的所有表。3 3在在右右窗窗格格中中,右右击击要要创创建建触触发发器器的的数数据据表表,在在弹弹出出的的快快捷捷菜菜单单中中,将将鼠鼠标标指指向向“所所有有任任务务”,在在出出现现的的下下一一级级子子菜菜单单中中选选择择“管理触发器管理触发器”菜单项,此时会出现菜单项,此时会出现 “触发器属性触发器属性”对话框。对话框。 4 4在在“名名称称”下下拉拉框框中中选选择择“ ”,在在“文文本本”编编辑辑框框中中输入触发器的文本命令。输入触发器的文本命令。5 5单击单击“检查语法检查语法”按钮,检查语句是否正确。按钮,检查语句是否正确。6 6单单击击“应应用用”按按钮钮,在在“名名称称”下下拉拉列列框框中中会会有有新新创创建建的的触触发器名字。发器名字。4.4.单击单击“确定确定”按钮,关闭窗口创建成功。按钮,关闭窗口创建成功。1684.13.6管理触发器管理触发器4.13.6.1 4.13.6.1 使用使用Enterprise ManagerEnterprise Manager显示触发器信息显示触发器信息1 1启动启动Enterprise Manager Enterprise Manager 登录到要使用的服务器。登录到要使用的服务器。2 2在在Enterprise Enterprise ManagerManager的的左左窗窗格格中中,展展开开要要创创建建触触发发器器的的数数据据库库文文件件夹夹,单单击击“表表”文文件件夹夹,此此时时在在右窗格中显示该数据库的所有表。右窗格中显示该数据库的所有表。3 3在在右右窗窗格格中中,右右击击要要创创建建触触发发器器的的数数据据表表,在在弹弹出出的的快快捷捷菜菜单单中中,将将鼠鼠标标指指向向“所所有有任任务务”,在在出出现现的的下下一一级级子子菜菜单单中中选选择择“管管理理触触发发器器”菜菜单单项项,出出现现 “触发器属性触发器属性”对话框。对话框。4 4在在“名名称称”下下拉拉框框中中选选择择所所要要查查看看的的触触发发器器的的名名称,在称,在“文本文本”编辑框中显示出该触发器的文本命令。编辑框中显示出该触发器的文本命令。1694.13.6.24.13.6.2使用系统存储过程查看触发器使用系统存储过程查看触发器系系统统存存储储过过程程sp_helpsp_help、sp_helptext sp_helptext 和和sp_depends sp_depends 分分别别提提供供有有关关触触发发器器的的不不同同信信息息。下下面面我我们们将将分分别别对对其其进行介绍:进行介绍:1 1sp_helpsp_help通通过过该该系系统统过过程程,可可以以了了解解触触发发器器的的一一般般信信息息,如如触触发器的名字、属性、类型、创建时间。发器的名字、属性、类型、创建时间。如:如:要查看我们已经建立的要查看我们已经建立的change_displaychange_display触发器。触发器。sp_help change_displaysp_help change_display2 2sp_helptextsp_helptext通过通过sp_helptext sp_helptext 能够查看触发器的正文信息能够查看触发器的正文信息如如:要要查查看看我我们们已已经经建建立立的的change_displaychange_display触触发发器器的的命令文本。命令文本。sp_helptext change_displaysp_helptext change_display1703 3sp_dependssp_depends通通过过sp_depends sp_depends 能能够够查查看看指指定定触触发发器器所所引引用用的表或指定的表涉及到的所有触发器。的表或指定的表涉及到的所有触发器。其语法形式如下:其语法形式如下:sp_depends sp_depends 触发器名字触发器名字sp_depends sp_depends 表名表名如如:要要查查看看我我们们已已经经建建立立的的change_displaychange_display触触发器所涉及的表。发器所涉及的表。Exec sp_depends change_displayExec sp_depends change_display注:用户必须在当前数据库中查看触发器的信注:用户必须在当前数据库中查看触发器的信息,而且被查看的触发器必须已经被创建。息,而且被查看的触发器必须已经被创建。1714.13.6.34.13.6.3修改、删除触发器修改、删除触发器通通 过过 Enterprise Enterprise Manager Manager 和和 系系 统统 过过 程程 或或Transaction_SQL Transaction_SQL 命命令令,可可以以修修改改触触发发器器的的名名字字和正文。和正文。1 1使用使用sp_rename sp_rename 命令修改触发器的名字命令修改触发器的名字其语法格式为:其语法格式为:sp_rename oldname,newnamesp_rename oldname,newnameqoldname为触发器原来的名称qnewname为触发器的新名称。2 2通过通过Enterprise Manager Enterprise Manager 修改触发器正文修改触发器正文v通过通过Enterprise Manager Enterprise Manager 修改触发器正文的操作步修改触发器正文的操作步骤与查看触发器信息一样。骤与查看触发器信息一样。v修改完触发器后要使用修改完触发器后要使用“检查语法检查语法”选项对语句进选项对语句进行检查。行检查。3 3通过通过Alert trigger Alert trigger 命令修改触发器正文命令修改触发器正文1724 4删除触发器删除触发器用户在使用完触发器后可以将其删除。用户在使用完触发器后可以将其删除。只有触发器属主才有权删除触发器。只有触发器属主才有权删除触发器。删除已创建的触发器有三种方法:删除已创建的触发器有三种方法:(1 1)用用系系统统命命令令DROP DROP TRIGGER TRIGGER 删删除除指指定定的的触触发发器器,其语法形式如下:其语法形式如下:DROP TRIGGER 触发器名字(2 2)删删除除触触发发器器所所在在的的表表时时,SQL SQL Server Server 将将自自动动删删除与该表相关的触发器。除与该表相关的触发器。(3 3)按按前前介介绍绍的的方方法法进进入入“触触发发器器属属性性”对对话话框框,在在该该对对话话框框中中选选择择要要删删除除的的触触发发器器,然然后后单单击击“删删除除”按钮即可。按钮即可。1734.14视图视图4.14.1创建视图创建视图SQL SERVER SQL SERVER 提供了使用提供了使用SQL SERVER Enterprise Manager SQL SERVER Enterprise Manager 和和SQL SQL 命令两种方法来创建视图,关于用命令两种方法来创建视图,关于用SQLSQL命令创建视图的方法曾在第命令创建视图的方法曾在第3 3章介绍过,在此只介绍第一种方法。章介绍过,在此只介绍第一种方法。使用使用 Enterprise Manager Enterprise Manager 来创建视图的方法如下:来创建视图的方法如下:1 1启动启动Enterprise ManagerEnterprise Manager,登录到指定的服务器。,登录到指定的服务器。2 2打打开开要要创创建建视视图图的的数数据据库库文文件件夹夹,选选中中“视视图图”图图标标,此此时时在在右右面面的的窗窗格格中中显显示示当当前前数数据据库库的的所所有有视视图图。右右击击“视视图图”图图标标,在在弹弹出出菜菜单单中中选选择择“新新建建视视图图”选选项项,打打开开“新新建建视视图图”对对话话框框,在在此此对对话话框框中中共共有四个区,从上到下依次为表区、列区、有四个区,从上到下依次为表区、列区、SQL script SQL script 区、数据结果区。区、数据结果区。3. 3. 在在窗窗口口中中,首首先先点点击击“添添加加表表”按按钮钮 ,打打开开添添加加表表对对话话框框,从从中中选择所有要包含到视图中的表,所有已添加的表都将显示到表区中。选择所有要包含到视图中的表,所有已添加的表都将显示到表区中。4. 4. 在在列列区区中中选选择择将将包包括括在在视视图图的的数数据据列列,这这此此时时相相应应的的SQL SQL SERVER SERVER 脚脚本便显示在本便显示在SQL script SQL script 区。区。5. 5. 单击单击 按钮,在数据结果区将显示包含在视图中的数据行。按钮,在数据结果区将显示包含在视图中的数据行。6. 6. 单击 按按钮,在在弹出出对话框框中中输入入视图名名,单击“保保存存”并并输入入视图的名称,完成的名称,完成视图的的创建。建。 1744.14.2管理视图管理视图4.14.2.14.14.2.1查看修改视图查看修改视图在在SQL SQL SERVER SERVER 中中, ,通通过过Enterprise Enterprise Manager Manager 查看和修改视图主要执行以下步骤查看和修改视图主要执行以下步骤: :方法方法1 1:1. 1. 启动启动Enterprise ManagerEnterprise Manager,登录到指定的服务器。,登录到指定的服务器。2. 2. 打打开开要要创创建建视视图图的的数数据据库库文文件件夹夹,选选中中“视视图图”图图标标,此此时时在在右右面面的的窗窗格格中中显显示示当当前前数数据据库库的的所所有有视视图。图。3. 3. 在在右右窗窗格格中中右右键键单单击击要要查查看看的的视视图图,在在弹弹出出菜菜单单中选择中选择“属性属性”菜单项,打开菜单项,打开“视图属性视图属性”对话框。对话框。4. 4. 在在该该对对话话框框内内可可浏浏览览到到该该视视图图的的SQLSQL文文本本,也也可可以以对对该该视视图图进进行行修修改改,然然后后单单击击“检检查查语语法法”按按钮钮来来对对语语句句合合法法性性进进行行检检查查。若若要要对对视视图图的的访访问问权权限限进进行行设设置,请单击置,请单击“权限权限”按钮。按钮。175方法方法2 2:1. 1. 启动启动Enterprise ManagerEnterprise Manager,登录到指定的服务器。,登录到指定的服务器。2. 2. 打打开开要要创创建建视视图图的的数数据据库库文文件件夹夹,选选中中“视视图图”图图标标,此此时时在在右右面面的的窗窗格格中中显显示示当当前前数数据据库库的的所所有有视视图。图。3. 3. 在在右右窗窗格格中中右右键键单单击击要要查查看看的的视视图图,在在弹弹出出菜菜单单中中选选择择“设设计计视视图图”菜菜单单项项,即即可可进进入入到到设设计计视视图图的的窗口。窗口。4 4在在该该窗窗口口中中可可按按照照创创建建新新视视图图的的方方法法对对原原有有的的视视图进行各种修改,最后存盘即可。图进行各种修改,最后存盘即可。1764.14.2.24.14.2.2使用存储过程检查视图使用存储过程检查视图在在SQL SQL SERVER SERVER 中中有有三三个个关关键键存存储储过过程程有有助助于于了了解解视视图信息,它们分别为:图信息,它们分别为:1 1sp_dependssp_depends2 2sp_helpsp_help3 3sp_helptextsp_helptext存存储储过过程程sp_depends sp_depends 返返回回系系统统表表中中存存储储的的任任何何信信息息,该该系系统统表表指指出出该该对对象象所所依依赖赖的的对对象象。除除视视图图外外,这这个个系系统过程可以在任何数据库对象上运行。其语法如下:统过程可以在任何数据库对象上运行。其语法如下:sp_depends sp_depends 数据库对象名称数据库对象名称系系统统过过程程sp_help sp_help 用用来来返返回回有有关关数数据据库库对对象象的的详详细细信信息息,如如果果不不针针对对某某一一特特定定对对象象,则则返返回回数数据据库库中中所所有有对对象信息。其语法如下:象信息。其语法如下:sp_help sp_help 数据库对象名称数据库对象名称系系统统过过程程sp_helptext sp_helptext 检检索索出出视视图图、触触发发器器、存存储储过过程的文本其。语法为:程的文本其。语法为:sp_helptext sp_helptext 视图或触发器或存储过程视图或触发器或存储过程1774.14.2.34.14.2.3删除视图删除视图除除了了可可以以使使用用第第3 3章章中中介介绍绍的的使使用用SQLSQL命命令令来来删删除除视视图图外外,在在SQL SQL SERVER SERVER 中中, ,通通过过Enterprise Enterprise Manager Manager 也可删除视图,主要执行以下步骤也可删除视图,主要执行以下步骤: :1. 1. 启动启动Enterprise ManagerEnterprise Manager,登录到指定的服务器。,登录到指定的服务器。2. 2. 打打开开要要创创建建视视图图的的数数据据库库文文件件夹夹,选选中中“视视图图”图图标标,此此时时在在右右面面的的窗窗格格中中显显示示当当前前数数据据库库的的所所有有视视图。图。3. 3. 在在右右窗窗格格中中右右键键单单击击要要查查看看的的视视图图,在在弹弹出出菜菜单单中选择中选择“删除删除”菜单项。菜单项。178小小 结结本章主要讲述了利用本章主要讲述了利用SQL Server 2000SQL Server 2000数据库管理系数据库管理系统进行数据库管理的方法,本章内容可以说是前面几章统进行数据库管理的方法,本章内容可以说是前面几章所讲述的理论内容的实践。所讲述的理论内容的实践。重点介绍了企业管理器和查询分析器的使用,对数据重点介绍了企业管理器和查询分析器的使用,对数据库的各种管理功能都可以利用这两个工具完成;库的各种管理功能都可以利用这两个工具完成;Transact-SQLTransact-SQL是是SQL ServerSQL Server对原有标准对原有标准SQLSQL的扩充,的扩充,可以帮助我们完成更为强大的数据库操作功能,尤其是可以帮助我们完成更为强大的数据库操作功能,尤其是其在存储过程的设计、触发器的设计方面应用更为广泛。其在存储过程的设计、触发器的设计方面应用更为广泛。在在SQL SQL ServerServer下下,利利用用Transact-SQLTransact-SQL、企企业业管管理理器器或或查查询询分分析析器器可可以以完完成成各各种种数数据据库库对对象象,如如:数数据据库库、数数据据表表、视视图图、存存储储过过程程、触触发发器器、约约束束、默默认认的的管管理理(包括创建、修改、查看、删除等)。(包括创建、修改、查看、删除等)。179
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号