购买

¥ 30.0

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 SQL-Server-2005数据库简明教程-第3章-Transact-SQL语言

SQL-Server-2005数据库简明教程-第3章-Transact-SQL语言.ppt

SQL-Server-2005数据库简明教程-第3章-Tran…

烟雨梦兮
2018-10-14 0人阅读 举报 0 0 暂无简介

简介:本文档为《SQL-Server-2005数据库简明教程-第3章-Transact-SQL语言ppt》,可适用于IT/计算机领域

第章TransactSQL语言数据定义语言数据定义语言(DDL)是指用来定义和管理数据库以及数据库中各种对象的语句这些语句包括CREATE、ALTER和DROP等。在SQLServer中数据库对象包括表、视图、触发器、存储过程、规则、默认、用户自定义的数据类型等。这些对象的创建、修改和删除等都可以通过使用CREATEALTERDROP等语句来完成。数据定义语言例创建数据库表*下面的例子将创建表S。*CREATETABLES(snochar()NOT*学号字段*CONSTRAINTPKsnoPRIMARYKEYCLUSTERED*主键约束*CHECK(snolike'')*检查约束*,snamechar(),*姓名字段*sexchar(),*性别字段*ageint,*年龄字段*deptvarchar()*系别字段*)数据定义语言例修改S表增加一个班号列程序清单如下:ALTERTABLESADDCLASSNOCHAR()数据定义语言例 删除S表程序清单如下:DROPtableS数据操纵语言(DML)数据操纵语言是指用来查询、添加、修改和删除数据库中数据的语句这些语句包括SELECT、INSERT、UPDATE、DELETE等。将在第章详细讲解SELECT语句的语法及实例。 INSERT语句INSERT语句用于向数据库表或者视图中加入一行数据。INSERT语句的语法形式如下:INSERTINTOtableorview(columnlist)VALUES(datavalues)其中tableorview是指要插入新记录的表或视图columnlist是可选项指定待添加数据的列VALUES子句指定待添加数据的具体值。列名的排列顺序不一定要和表定义时的顺序一致。但当指定列名表时VALUES子句值的排列顺序必须和列名表中的列名排列顺序一致个数相等数据类型一一对应。 INSERT语句在进行数据插入操作时须注意以下几点:()必须用逗号将各个数据分开字符型数据要用单引号括起来。()INTO子句中没有指定列名则新插入的记录必须在每个属性列上均有值且VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致。()将VALUES子句中的值按照INTO子句中指定列名的顺序插入到表中。()对于INTO子句中没有出现的列则新插入的记录在这些列上将取空值如上例的SCORE即赋空值。但在表定义时有NOT约束的属性列不能取空值。 INSERT语句例创建SC表(学生选课表)并向SC表中插入一条选课记录(’S’,’C’)。程序清单如下:CREATETABLESC(snochar()NOT,cnochar(),*课程编号字段*scorenumerical(,)*成绩字段*)GoINSERTINTOSC(sno,cno)VALUES('','c')Go INSERT语句下面是插入与列顺序不同的数据的例子。例使用columnlist及VALUES列表显式地指定将被插入每个列的值。程序清单如下:CREATETABLET(columnint,columnvarchar())GoINSERTT(column,column)VALUES('Thisisatest',) INSERT语句插入多行数据的语法格式为:INSERTINTOtableorview(columnlist)子查询例求出各位学生的平均成绩把结果存放在新表AVGSCORE中。程序清单如下:*首先建立新表AVGSCORE用来存放学号和学生的平均成绩。*CREATETABLEAVGSCORE(SNOCHAR(),AVGSCORESMALLINT)Go*利用子查询求出SC表中各位学生的平均成绩把结果存放在新表AVGSCORE中。*INSERTINTOAVGSCORESELECTSNO,AVG(SCORE)FROMSCGROUPBYSNO UPDATE语句UPDATE语句用于修改数据库表或视图中特定记录或者字段的数据其语法形式如下:UPDATEtableorviewSET<column>=<expression>,<column>=<expression>>…WHERE<searchcondition>其中:tableorview是指要修改的表或视图SET子句给出要修改的列及其修改后的值其中column为要修改的列名expression为其修改后的值WHERE子句指定待修改的记录应当满足的条件WHERE子句省略时则修改表中的所有记录。 UPDATE语句例 一个带有WHERE条件的修改语句。程序清单如下:useadventureworksgoupdatepersonaddresssetcity='Boston'whereaddressid=例将所有学生年龄增加岁程序清单如下:UPDATESSETAGE=AGE UPDATE语句例创建把讲授C课程的教师的工资增加元。程序清单如下:*T表(教师基本情况表)的结构为T(TNO,TN,SEX,AGE,PROF,SAL,DEPT)分别表示教师的编号姓名性别年龄职称工资系别。TC表(教师授课表)的结构为TC(TNO,CNO)分别表示教师的编号课程编号。*UPDATETSETSAL=SALWHERETNOIN(SELECTTTNOFROMT,TCWHERETTNO=TCTNOANDTCCNO='C')*通过连接查询找到讲授C课程的教师编号。* DELETE语句使用DELETE语句可以删除表中的一行或多行记录其语法格式为:DELETEFROMtableorviewWHERE<searchcondition>其中:tableorview是指要删除数据的表或视图WHERE子句指定待删除的记录应当满足的条件WHERE子句省略时则删除表中的所有记录。下面是删除一行记录的例子。例删除张益琳教师的记录。程序清单如下:DELETEFROMTWHERETN=’张益琳’ DELETE语句下面是删除多行记录的例子。例删除所有教师的授课记录。程序清单如下:DELETEFROMTC执行此语句后TC表即为一个空表但其定义仍存在数据字典中。例删除李明同学选课的记录。DELETEFROMSCWHERESNO=(SELECTSNOFROMSWHERESN=’李明’)数据控制语言数据控制语言(DCL)是用来设置或更改数据库用户或角色权限的语句包括GRANTDENYREVOKE等语句。在默认状态下只有sysadmindbcreatordbowner或dbsecurityadmin等人员才有权力执行数据控制语言。 GRANT语句、语句权限与角色的授予SQL语言使用GRANT语句为用户授予语句权限的语法格式为:GRANT<语句权限>|<角色>,<语句权限>|<角色>…TO<用户名>|<角色>|PUBLIC,<用户名>|<角色>…WITHADMINOPTION其语义为:将指定的语句权限授予指定的用户或角色。其中:()PULBIC代表数据库中的全部用户()WITHADMINOPTION为可选项指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。 GRANT语句、语句权限与角色的授予例 给用户Mary和John以及WindowsNT组CorporateBobJ授予多个语句权限。程序清单如下:GRANTCREATEDATABASE,CREATETABLETOMary,John,CorporateBobJ例为用户ZhangYiLin授予CREATETABLE的语句权限。程序清单如下:GRANTCREATETABLETOZhangYiLin GRANT语句、对象权限与角色的授予数据库管理员拥有系统权限而作为数据库的普通用户只对自己创建的基本表、视图等数据库对象拥有对象权限。如果要共享其他的数据库对象则必须授予他一定的对象权限。同语句权限的授予类似SQL语言使用GRANT语句为用户授予对象权限其语法格式为:GRANTALL|<对象权限>(列名,列名…),<对象权限>…ON<对象名>TO<用户名>|<角色>|PUBLIC,<用户名>|<角色>…WITHADMINOPTION其语义为:将指定的操作对象的对象权限授予指定的用户或角色。其中:()ALL代表所有的对象权限。()列名用于指定要授权的数据库对象的一列或多列。如果不指定列名被授权的用户将在数据库对象的所有列上均拥有指定的特权。实际上只有当授予INSERT、UPDATE权限时才需指定列名。()ON子句用于指定要授予对象权限的数据库对象名可以是基本表名、视图名等。()WITHADMINOPTION为可选项指定后则允许被授权的用户将权限再授予其他用户或角色。 GRANT语句、对象权限与角色的授予例 在权限层次中授予对象权限。首先给所有用户授予SELECT权限然后将特定的权限授予用户MaryJohn和Tom。程序清单如下:GRANTSELECTONsTOpublicGOGRANTINSERT,UPDATE,DELETEONsTOMary,John,TomGO GRANT语句、对象权限与角色的授予例将查询T表和修改教师职称的权限授予USER并允许将此权限授予其他用户。程序清单如下:GRANTSELECT,UPDATE(PROF)ONTTOUSERWITHADMINOPTION上例中USER具有此对象权限并可使用GRANT命令给其他用户授权如下例USER将此权限授予USER:GRANTSELECT,UPDATE(PROF)ONTTOUSER REVOKE语句REVOKE语句是与GRANT语句相反的语句它能够将以前在当前数据库内的用户或者角色上授予或拒绝的权限删除但是该语句并不影响用户或者角色从其他角色中作为成员继承过来的权限、语句权限与角色的收回数据库管理员可以使用REVOKE语句收回语句权限其语法格式为:REVOKE<语句权限>|<角色>,<语句权限>|<角色>…FROM<用户名>|<角色>|PUBLIC,<用户名>|<角色>…例:收回用户ZHANGYILIN所拥有的CREATETABLE的语句权限。REVOKECREATETABLEFROMZHANGYILIN、对象权限与角色的收回所有授予出去的权力在必要时都可以由数据库管理员和授权者收回收回对象权限仍然使用REVOKE语句其语法格式为:REVOKE<对象权限>|<角色>,<对象权限>|<角色>…FROM<用户名>|<角色>|PUBLIC,<用户名>|<角色>… REVOKE语句例收回用户USER对C表的查询权限。程序清单如下:REVOKESELECTONCFROMUSER例收回用户USER查询T表和修改教师职称的权限。程序清单如下:REVOKESELECT,UPDATE(PROF)ONTFROMUSER在上例中USER将对T表的权限授予了USER在收回USER对T表的权限的同时系统会自动收回USER对T表的权限。 REVOKE语句例 首先从public角色中收回SELECT权限然后收回用户MaryJohn和Tom的特定权限。程序清单如下:USEpubsGOREVOKESELECTONsFROMpublicGOREVOKEINSERT,UPDATE,DELETEONsFROMMary,John,Tom DENY语句DENY语句用于拒绝给当前数据库内的用户或者角色授予权限并防止用户或角色通过其组或角色成员继承权限。否定语句权限的语法形式为:DENYALL|<语句权限>|<角色>,<语句权限>|<角色>…TO<用户名>|<角色>|PUBLIC,<用户名>|<角色>…否定对象权限的语法形式为:DENYALL|<对象权限>(列名,列名…),<对象权限>…ON<对象名>TO<用户名>|<角色>|PUBLIC,<用户名>|<角色>… DENY语句例 首先给public角色授予SELECT权限然后拒绝用户MaryJohn和Tom的特定权限。程序清单如下:USEpubsGOGRANTSELECTONsTOpublicGODENYSELECT,INSERT,UPDATE,DELETEONsTOMary,John,Tom系统存储过程系统存储过程是SQLServer系统创建的存储过程它的目的在于能够方便地从系统表中查询信息或者完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程可以在任意一个数据库中执行。系统存储过程创建并存放于系统数据库master中并且名称以sp或者xp开头。一些系统过程只能由系统管理员使用而有些系统过程通过授权可以被其他用户使用。系统存储过程系统存储过程的部分示例如下:spaddtype:用于定义一个用户定义数据类型spconfigure:用于管理服务器配置选项设置xpsendmail:用于发送电子邮件或寻呼信息spstoredprocedures:用于返回当前数据库中的存储过程的清单sphelp:用于显示参数清单和其数据类型spdepends:用于显示存储过程依据的对象或者依据存储过程的对象sphelptext:用于显示存储过程的定义文本sprename:用于修改当前数据库中用户对象的名称。其他语言元素注释变量运算符函数流程控制语句注释注释是程序代码中不执行的文本字符串(也称为注解)。使用注释对代码进行说明不仅能使程序易读易懂而且有助于日后的管理和维护。注释通常用于记录程序名称、作者姓名和主要代码更改的日期。注释还可以用于描述复杂的计算或者解释编程的方法。在SQLServer中可以使用两种类型的注释字符:一种是ANSI标准的注释符“”它用于单行注释另一种是与C语言相同的程序注释符号即“**”。“*”用于注释文字的开头“*”用于注释文字的结尾利用它们可以在程序中标识多行文字为注释。当然单行注释也可以使用“**”我们只需将注释行以“*”开头并以“*”结尾即可。反之段落注释也可以使用“”只需使段落注释的每一行都以“”开头即可。注释例 使用两种注释类型的例子。程序清单如下:USEAdventureWorksGOFirstlineofamultiplelinecommentSecondlineofamultiplelinecommentSELECT*FROMpersonaddressGO*注释语句的第一行注释语句的第二行*SELECT*FROMProductionProductGO在TransactSQL语言调试过程中使用注释语句。变量变量是一种语言中必不可少的组成部分。TransactSQL语言中有两种形式的变量一种是用户自己定义的局部变量另外一种是系统提供的全局变量。局部变量局部变量是一个能够拥有特定数据类型的对象它的作用范围仅限制在程序内部。局部变量被引用时要在其名称前加上标志“@”而且必须先用DECLARE命令定义后才可以使用。定义局部变量的语法形式如下:DECLAER{localvariabledatatype}…n其中参数localvariable用于指定局部变量的名称变量名必须以符号开头并且局部变量名必须符合SQLServer的命名规则。参数datatype用于设置局部变量的数据类型及其大小。datatype可以是任何由系统提供的或用户定义的数据类型。但是局部变量不能是textntext或image数据类型。使用DECLARE命令声明并创建局部变量之后会将其初始值设为如果想要设定局部变量的值必须使用SELECT命令或者SET命令。其语法形式为:SET{{localvariable=expression}或者SELECT{localvariable=expression},n其中参数localvariable是给其赋值并声明的局部变量参数expression是任何有效的SQLServer表达式。变量局部变量例 创建一个myvar变量然后将一个字符串值放在变量中最后输出myvar变量的值。程序清单如下:DECLAREmyvarchar()selectmyvar='Thisisatest'SELECTmyvarGO例 通过查询给变量赋值。程序清单如下:USEadventureworksGODECLARErowsintSETrows=(SELECTCOUNT(*)FROMhumanresourcesemployee)变量全局变量除了局部变量之外SQLServer系统本身还提供了一些全局变量。全局变量是SQLServer系统内部使用的变量其作用范围并不仅仅局限于某一程序而是任何程序均可以随时调用。全局变量通常存储一些SQLServer的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是TransactSQL命令执行后的状态值。在使用全局变量时应该注意以下几点:()全局变量不是由用户的程序定义的它们是在服务器级定义的。()用户只能使用预先定义的全局变量。()引用全局变量时必须以标记符“”开头。()局部变量的名称不能与全局变量的名称相同否则会在应用程序中出现不可预测的结果。变量全局变量例 显示到当前日期和时间为止试图登录SQLServer的次数。程序清单如下:SELECTGETDATE()AS'当前的时期和时间',CONNECTIONSAS'试图登录的次数'运算符运算符是一些符号它们能够用来执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较。在SQLServer中运算符主要有以下六大类:算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符和字符串串联运算符。.算术运算符算术运算符可以在两个表达式上执行数学运算这两个表达式可以是数字数据类型分类的任何数据类型。算术运算符包括加()、减(-)、乘(*)、除()和取模()。.赋值运算符TransactSQL中只有一个赋值运算符即(=)。赋值运算符使我们能够将数据值指派给特定的对象。另外还可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系。运算符.位运算符位运算符使我们能够在整型数据或者二进制数据(image数据类型除外)之间执行位操作。此外在位运算符左右两侧的操作数不能同时是二进制数据。表列出了所有的位运算符及其含义。表位运算符运算符.比较运算符比较运算符亦称为关系运算符用于比较两个表达式的大小或是否相同其比较的结果是布尔值即TRUE(表示表达式的结果为真)、FALSE(表示表达式的结果为假)以及UNKNOWN。除了textntext或image数据类型的表达式外比较运算符可以用于所有的表达式。.逻辑运算符逻辑运算符可以把多个逻辑表达式连接起来。逻辑运算符包括AND、OR和NOT等运算符。逻辑运算符和比较运算符一样返回带有TRUE或FALSE值的布尔数据类型。三个运算符的优先级别为:NOTANDOR。.字符串串联运算符字符串串联运算符允许通过加号()进行字符串串联这个加号即被称为字符串串联运算符。例如对于语句SELECT’abc’’def’其结果为abcdef。运算符在SQLServer中运算符的优先等级从高到低如下所示如果优先等级相同则按照从左到右的顺序进行运算。()括号:()()乘、除、求模运算符:*()加减运算符:+-()比较运算符:=><>=<=<>!=!>!<()位运算符:^|()逻辑运算符:NOT()逻辑运算符:AND()逻辑运算符:OR。函数在TransactSQL语言中函数被用来执行一些特殊的运算以支持SQLServer的标准命令。SQLServer包含多种不同的函数用以完成各种工作每一个函数都有一个名称在名称之后有一对小括号如:gettime()。大部分的函数在小括号中需要一个或者多个参数。TransactSQL编程语言提供了四种函数:行集函数、聚合函数、Ranking函数、标量函数。函数行集函数行集函数可以在TransactSQL语句中当作表引用。例 通过行集函数OPENQUERY()执行一个分布式查询以便从服务器local中提取表department中的记录。程序清单如下:select*fromopenquery(local,’select*fromdepartment’)函数聚合函数聚合函数用于对一组值进行计算并返回一个单一的值。除COUNT函数之外聚合函数忽略空值。聚合函数经常与SELECT语句的GROUPBY子句一同使用。仅在下列项中聚合函数允许作为表达式使用:SELECT语句的选择列表(子查询或外部查询)COMPUTE或COMPUTEBY子句HAVING子句。函数聚合函数计算AdventureWorksCycles的副总所用的平均休假小时数以及总的病假小时数。对检索到的所有行每个聚合函数都生成一个单独的汇总值。程序清单如下。USEAdventureWorksGOSELECTAVG(VacationHours)as'Averagevacationhours',SUM(SickLeaveHours)as'Totalsickleavehours'FROMHumanResourcesEmployeeWHERETitleLIKE'VicePresident'函数Ranking函数Ranking函数为查询结果数据集分区中的每一行返回一个序列值。依据此函数一些行可能取得和其他行一样的序列值。TransactSQL提供以下一些Ranking函数:RANKDENSERANKNTILEROWNUMBER。函数标量函数标量函数用于对传递给它的一个或者多个参数值进行处理和计算并返回一个单一的值。标量函数可以应用在任何一个有效的表达式中。标量函数可分为如表所示的几大类表标量函数的分类函数标量函数()字符串函数字符串函数可以对二进制数据、字符串和表达式执行不同的运算大多数字符串函数只能用于char和varchar数据类型以及明确转换成char和varchar的数据类型少数几个字符串函数也可以用于binary和varbinary数据类型。字符串函数可以分为以下几大类:基本字符串函数:UPPERLOWERSPACEREPLICATESTUFFREVERSELTRIMRTRIM。字符串查找函数:CHARINDEXPATINDEX。长度和分析函数:DATALENGTHSUBSTRINGRIGHT。转换函数:ASCHCHARSTRSOUNDEXDIFFERENCE。函数标量函数()字符串函数例 使用LTRIM函数删除字符变量中的起始空格。程序清单如下:DECLAREstringtotrimvarchar()SETstringtotrim='Fivespacesareatthebeginningofthisstring'SELECT'Hereisthestringwithouttheleadingspaces:'LTRIM(stringtotrim)函数标量函数()字符串函数例 使用可选的startlocation参数从addressline列的第个字符开始查找“shoe”程序清单如下。USEadventureworksSELECTCHARINDEX('shoe',addressline,)FROMpersonaddressWHEREaddressid=''函数标量函数()字符串函数例显示如何只返回字符串的一部分。该查询在一列中返回personcontact表中的姓氏在另一列中返回personcontact表中的名字首字母。程序清单如下:USEadventureworksSELECTlastname,SUBSTRING(firstname,,)FROMpersoncontactORDERBYlastname例 在第一个字符串(abcdef)中删除从第二个位置(字符b)开始的三个字符然后在删除的起始位置插入第二个字符串创建并返回一个字符串。程序清单如下:SELECTSTUFF('abcdef',,,'ijklmn')函数标量函数()日期和时间函数日期和时间函数用于对日期和时间数据进行各种不同的处理和运算并返回一个字符串、数字值或日期和时间值。与其他函数一样可以在SELECT语句的SELECT和WHERE子句以及表达式中使用日期和时间函数。表日期和时间函数的类型函数标量函数()日期和时间函数例 显示在humanresourcesemployee表中雇用日期到当前日期间的天数。程序清单如下。USEadventureworksSELECTDATEDIFF(day,hiredate,getdate())ASdiffdaysFROMhumanresourcesemployee例 从GETDATE函数返回的日期中提取月份名。程序清单如下:SELECTDATENAME(month,getdate())AS'MonthName'函数标量函数()数学函数数学函数用于对数字表达式进行数学运算并返回运算结果。数学函数可以对SQLServer提供的数字数据(decimal、integer、float、real、money、smallmoney、smallint和tinyint)进行处理。在SQLServer中常用的数学函数如表所示。函数标量函数()数学函数例 在同一表达式中使用CEILING()FLOOR()ROUND()函数。程序清单如下:selectceiling(),floor(),round(,)函数标量函数()系统函数系统函数用于返回有关SQLServer系统、用户、数据库和数据库对象的信息。系统函数可以让用户在得到信息后使用条件语句根据返回的信息进行不同的操作。与其他函数一样可以在SELECT语句的SELECT和WHERE子句以及表达式中使用系统函数。函数标量函数()系统函数转换函数有两个:CONVERT和CAST。CAST函数允许把一个数据类型强制转换为另一种数据类型其语法形式为:CAST(expressionASdatatype)CONVERT函数允许用户把表达式从一种数据类型转换成另一种数据类型还允许把日期转换成不同的样式其语法形式为:CONVERT(datatype(length),expression,style)函数标量函数()系统函数转换函数有两个:CONVERT和CAST。CAST函数允许把一个数据类型强制转换为另一种数据类型其语法形式为:CAST(expressionASdatatype)CONVERT函数允许用户把表达式从一种数据类型转换成另一种数据类型还允许把日期转换成不同的样式其语法形式为:CONVERT(datatype(length),expression,style)函数标量函数()系统函数例示例检索列表价格的第一位是的产品的名称并将ListPrice转换为int。程序清单如下。USEAdventureWorksGOSELECTSUBSTRING(Name,,)ASProductName,ListPriceFROMProductionProductWHERECAST(ListPriceASint)LIKE''GO函数标量函数()系统函数例 用style参数将当前日期转换为不同格式的字符串。程序清单如下:SELECT''=CONVERT(char,GETDATE(),),''=CONVERT(char,GETDATE(),),''=CONVERT(char,GETDATE(),)函数标量函数()系统函数例 从adventureworks数据库中返回personcontact表的首列名称程序清单如下。USEadventureworksSELECTCOLNAME(OBJECTID('personcontact'),)例 检查sysdatabases中的每一个数据库使用数据库标识号来确定数据库名称。程序清单如下:USEmasterSELECTdbid,DBNAME(dbid)ASDBNAMEFROMsysdatabasesORDERBYdbid流程控制语句流程控制语句是指那些用来控制程序执行和流程分支的语句在SQLServer中流程控制语句主要用来控制SQL语句、语句块或者存储过程的执行流程。流程控制语句.IF…ELSE语句IF…ELSE语句是条件判断语句其中ELSE子句是可选的最简单的IF语句没有ELSE子句部分。IF…ELSE语句用来判断当某一条件成立时执行某段程序条件不成立时执行另一段程序。SQLServer允许嵌套使用IF…ELSE语句而且嵌套层数没有限制。IF…ELSE语句的语法形式为:IFBooleanexpression    {sqlstatement|statementblock}ELSE    {sqlstatement|statementblock}流程控制语句.IF…ELSE语句例 显示带有语句块的IF条件。如果产品的平均价格不低于$那么就显示文本:Averagepriceismorethan$程序清单如下。USEadventureworksIF(SELECTAVG(listprice)FROMproductionproductWHEREcolor='blue')<$BEGINPRINT'Thefollowingproductareexcellent:'PRINT''SELECTSUBSTRING(name,,)ASnameFROMproductionproductWHEREcolor='blue'ENDELSEPRINT'Averagepriceismorethan$' 流程控制语句.BEGIN…END语句BEGIN…END语句能够将多个TransactSQL语句组合成一个语句块并将它们视为一个单元处理。在条件语句和循环等控制流程语句中当符合特定条件便要执行两个或者多个语句时就需要使用BEGIN…END语句。BEGIN…END语句的语法形式为:BEGIN    {sqlstatement        |statementblock    }END流程控制语句.BEGIN…END语句例 利用BEGIN和END语句使得IF语句在取值为FALSE时跳过语句块。程序清单如下:IF(ERROR<>)BEGINSETErrorSaveVariable=ERRORPRINT'Errorencountered,'CAST(ErrorSaveVariableASVARCHAR())END流程控制语句.GO语句Go语句是批的结束语句。批是一起提交并作为一个组执行的若干SQL语句。例用Go语句作为批的结束语句。程序清单如下:USEadventureworksGODECLAREMyMsgVARCHAR()SELECTMyMsg='Hello,World'GOMyMsg在Go语句后失效。流程控制语句.CASE语句CASE语句可以计算多个条件式并将其中一个符合条件的结果表达式返回。CASE语句按照使用形式的不同可以分为简单CASE语句和搜索CASE语句。它们的语法形式分别为:CASEinputexpression    WHENwhenexpressionTHENresultexpression        n            ELSEelseresultexpression    ENDCASE    WHENBooleanexpressionTHENresultexpression        n            ELSEelseresultexpression    END流程控制语句.CASE语句例 使用CASE函数去更改产品的分类显示以使其更易于理解程序清单如下。USEadventureworksSELECTCategory=CASEcolorWHEN'red'THEN'redcolor'WHEN'black'THEN'blackcolor'WHEN'silver'THEN'silvercolor'WHEN'yellow'THEN'yellowcolor'WHEN'blue'THEN'bluecolor'END,CAST(nameASvarchar())AS'Shortenedname',listpriceASPriceFROMproductionproductWHERElistpriceISNOTORDERBYcolor,priceCOMPUTEAVG(listprice)BYcolor流程控制语句.CASE语句例 使用搜索CASE函数根据产品的价格范围将价格显示为文本注释程序清单如下。USEadventureworksSELECT'PriceCategory'=CASEWHENlistpriceISTHEN'Notyetpriced'WHENlistprice<THEN'VeryReasonableTitle'WHENlistprice>=andlistprice<THEN'CoffeeTableTitle'ELSE'Expensive!'END,CAST(nameASvarchar())AS'Shortenedname'FROMproductionproductORDERBYlistpriceGO流程控制语句.WHILE…CONTINUE…BREAK语句WHILE…CONTINUE…BREAK语句用于设置重复执行SQL语句或语句块的条件。只要指定的条件为真就重复执行语句。其中CONTINUE语句可以使程序跳过CONTINUE语句后面的语句回到WHILE循环的第一行命令。BREAK语句则使程序完全跳出循环结束WHILE语句的执行。其语法形式为:WHILEBooleanexpression    {sqlstatement|statementblock}    BREAK    {sqlstatement|statementblock}    CONTINUE流程控制语句.WHILE…CONTINUE…BREAK语句例 在嵌套的IFELSE和WHILE中使用BREAK和CONTINUE。如果平均价格少于$WHILE循环就将价格加倍然后选择最高价。如果最高价少于或等于$WHILE循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过$然后退出WHILE循环并打印一条消息。程序清单如下:USEadventureworksWHILE(SELECTAVG(listprice)FROMproductionproduct)<$BEGINUPDATEproductionproductSETlistprice=listprice*SELECTMAX(listprice)FROMproductionproductIF(SELECTMAX(listprice)FROMproductionproduct)>$BREAKELSECONTINUEENDPRINT'Toomuchforthemarkettobear'流程控制语句.GOTO语句GOTO语句可以使程序直接跳到指定的标有标识符的位置处继续执行而位于GOTO语句和标识符之间的程序将不会被执行。GOTO语句和标识符可以用在语句块、批处理和存储过程中标识符可以为数字与字符的组合但必须以“:”结尾。如:‘a:’。在GOTO语句行标识符后面不用跟“:”。GOTO语句的语法形式为:GOTOlabel……label:例 利用GOTO语句求出从加到的总和。程序清单如下:declaresumint,countintselectsum=,count=label:selectsum=sumcountselectcount=countifcount<=gotolabelselectcountsum流程控制语句.WAITFOR语句WAITFOR语句用于暂时停止执行SQL语句、语句块或者存储过程等直到所设定的时间已过或者所设定的时间已到才继续执行。WAITFOR语句的语法形式为:WAITFOR{DELAY'time'|TIME'time'}其中DELAY用于指定时间间隔TIME用于指定某一时刻其数据类型为datetime格式为‘hh:mm:ss’。例 使用WAITFORTIME语句以便在晚上:执行存储过程updateallstats。程序清单如下:BEGINWAITFORTIME':'EXECUTEupdateallstatsEND流程控制语句.RETURN语句RETURN语句用于无条件地终止一个查询、存储过程或者批处理此时位于RETURN语句之后的程序将不会被执行。RETURN语句的语法形式为:RETURNintegerexpression其中参数integerexpression为返回的整型值。存储过程可以给调用过程或应用程序返回整型值。流程控制语句.RETURN语句例 显示如果在执行findjobs时没有给出用户名作为参数RETURN则将一条消息发送到用户的屏幕上然后从过程中退出。如果给出用户名将从适当的系统表中检索由该用户在当前数据库内创建的所有对象名。程序清单如下:CREATEPROCEDUREfindjobsnmsysname=ASIFnmISBEGINPRINT'Youmustgiveausername'RETURNENDELSEBEGINSELECToname,oid,ouidFROMsysobjectsoINNERJOINmastersysloginslONouid=lsidWHERElname=nmEND

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/75

SQL-Server-2005数据库简明教程-第3章-Transact-SQL语言

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利