TransactSQL语言.ppt

上传人:牧羊曲112 文档编号:6522115 上传时间:2023-11-08 格式:PPT 页数:88 大小:397.50KB
返回 下载 相关 举报
TransactSQL语言.ppt_第1页
第1页 / 共88页
TransactSQL语言.ppt_第2页
第2页 / 共88页
TransactSQL语言.ppt_第3页
第3页 / 共88页
TransactSQL语言.ppt_第4页
第4页 / 共88页
TransactSQL语言.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《TransactSQL语言.ppt》由会员分享,可在线阅读,更多相关《TransactSQL语言.ppt(88页珍藏版)》请在三一办公上搜索。

1、第7章 Transact_SQL语言,学习要点:SQL语句中的命名规则和注释变量的创建与使用 SQL语句中各类运算符、函数以及批处理语句 各类流程控制语句 7.1 SQL语言简介 7.2 常量 7.3 变量 7.4 运算符 7.5 函数 7.6 流控制语句和批处理,7.1 SQL语言简介,SQL语句是位于加利福尼亚的IBM公司的San Jose Research Laboratory在20世纪70年代后期开发出来的,通常我们将它翻译为结构化查询语言(Structured Query Language)Transact-SQL是一种在SQL语言基础上发展起来的扩充语言。它包含两部分,其一是SQL

2、语句的标准语言部分,另一部分是在标准SQL语句上进行的扩充,7.2 常量,7.2.1 常量 定义常量是指在程序运行过程中值不变的量。常量可分为:字符串常量、整型常量、实型常量、日期时间常量、货币常量等。如china、1894、2.0等等,7.2.2 注释 单行注释单行注释是使用两个连在一起的减号“-”作为注释;注释语句写在注释符的后面,以最近的回车符作为注释的结束。例7-1:-该程序中对于某些难理解的语句行进行注释USE sales-打开sales数据库GOSELECT ProductID,Productname,PriceFROM ProductsWHERE Price=50ORDER BY

3、 Price DESC,单行注释,多行注释多行注释是使用“/*/”作为注释符“/*”用于注释文字的开头,“*/”用于注释文字的结尾,中间部分加上注释性文字说明,USE NorthwindGO-First line of a multiple-line comment.-Second line of a multiple-line comment.SELECT*FROM EmployeesGO/*First line of a multiple-line comment.Second line of a multipl-line comment.*/SELECT*FROM Products,两个

4、单行注释,一个多行注释,例7-2:,7.3 变量,变量类型全局变量系统预先定义好的,SQL用户直接可以从系统中进行调用 局部变量 局部变量是用户根据自己的需要定义的,对于局部变量需要注意的是必须先创建后使用,变量用于临时存放数据,变量有名字及其数据类型两个属性。,7.3.1 全局变量使用全局变量时应该注意:由系统在服务器级定义的,不是由哪一个特定的用户在他们的程序定义的只能使用预先SQL系统定义好的全局变量,不能自己创建全局变量全局变量的名称必须以标记符“”开头 用户自己创建的局部变量的名称不能与全局变量名相同全局变量对用户来说是只读的,用户无法对他们进行修改,SQL Sever 2000预设

5、的全局变量及含义如下:CONNECTIONS:返回自上次启动 Microsoft SQL Server 以来连接或试图连接的次数。CPU_BUSY:返回自上次启动 Microsoft SQL Server 以来 CPU 的工作时间,单位为毫秒(基于系统计时器的分辨率)。CURSOR_ROWS:返回连接上最后打开的游标中当前存在的合格行的数量。DATEFIRST:返回 SET DATEFIRST 参数的当前值,SET DATEFIRST 参数指明所规定的每周第一天:1 对应星期一,2 对应星期二,依次类推,用 7 对应星期日。DBTS:为当前数据库返回当前 timestamp 数据类型的值。这一

6、 timestamp 值保证在数据库中是唯一的。ERROR:返回最后执行的 Transact-SQL 语句的错误代码。FETCH_STATUS:返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。,SQL Sever 2000预设的全局变量及含义如下:IDENTITY:返回最后插入的标识列的列值。IDLE:返回 Microsoft SQL Server 自上次启动后闲置的时间,单位为毫秒(基于系统计时器的分辨率)。IO_BUSY:返回 Microsoft SQL Server 自上次启动后用于执行输入和输出操作的时间,单位为毫秒(基于系统计时器的分辨率)。LAN

7、GID:返回当前所使用语言的本地语言标识符(ID)。LANGUAGE:返回当前使用的语言名。LOCK_TIMEOUT:返回当前会话的当前锁超时设置,单位为毫秒。MAX_CONNECTIONS:返回 Microsoft SQL Server 上允许的同时用户连接的最大数。返回的数不必为当前配置的数值。MAX_PRECISION:返回 decimal 和 numeric 数据类型所用的精度级别,即该服务器中当前设置的精度。,SQL Sever 2000预设的全局变量及含义如下:NESTLEVEL:返回当前存储过程执行的嵌套层次(初始值为 0)。OPTIONS:返回当前 SET 选项的信息。PACK

8、_RECEIVED:返回 Microsoft SQL Server 自上次启动后从网络上读取的输入数据包数目。PACK_SENT:返回 Microsoft SQL Server 自上次启动后写到网络上的输出数据包数目。PACKET_ERRORS:返回自 SQL Server 上次启动后,在 Microsoft SQL Server 连接上发生的网络数据包错误数。PROCID:返回当前过程的存储过程标识符(ID)。REMSERVER:当远程 Microsoft SQL Server 数据库服务器在登录记录中出现时,返回它的名称。ROWCOUNT:返回受上一语句影响的行数。SERVERNAME:返

9、回运行 Microsoft SQL Server 的本地服务器名称。SERVICENAME:返回SQL Server当前运行的服务器名,SQL Sever 2000预设的全局变量及含义如下:SPID:返回当前用户进程的服务器进程标识符(ID)。TEXTSIZE:返回 SET 语句 TEXTSIZE 选项的当前值,它指定 SELECT 语句返回的 text 或 image 数据的最大长度,以字节为单位。TIMETICKS:返回一刻度的微秒数。TOTAL_ERRORS:返回 Microsoft SQL Server 自上次启动后,所遇到的磁盘读/写错误数。TOTAL_READ:返回 Microso

10、ft SQL Server 自上次启动后读取磁盘(不是读取高速缓存)的次数。TOTAL_WRITE:返回 Microsoft SQL Server 自上次启动后写入磁盘的次数。TRANCOUNT:返回当前连接的活动事务数。VERSION:返回 Microsoft SQL Server 当前安装的日期、版本和处理器类型。,全局变量在程序中的应用:利用全局变量CONNECTIONS显示到系统的当前日期和时间为止,用户登录SQL SERVER的次数。,SELECT GETDATE()AS Todays Date and Time SELECT CONNECTIONSAS Login Attempts

11、,例7-3,全局变量在程序中的应用:例7_5:下面的示例返回当前用户进程的进程ID、登录名和用户名,SELECT SPID AS ID,SYSTEM_USER AS Login Name,USER AS User Name,7.3.2 局部变量创建局部变量 语法格式如下:DECLARE local_variable data_type nlocal_variable:用于指定新创建的局部变量的名称data_type:表示新创建的局部变量的数据类型及其长度 n:表示在一个DECLARE语句中可以同时定义n个局部变量,局部变量赋值用SET语句、SELECT语句赋值,语法格式如下:SET local

12、_variable=expression local_variable:表示进行赋值的局部变量的名称。expression:是为该变量所赋的值,可以是任何有效的SQL SERVER表达式。,局部变量赋值用SET语句、SELECT语句赋值,语法格式如下:SELECT 变量1=表达式1,变量2=表达式2,变量n=表达式n说明:1.用SELECT命令可以一次给多个变量赋值。2.当表达式为表的列名时,可使用子查询从表中一次返回多个值,变量只保存最后一个返回值;如果子查询没有返回值,则变量被赋空值NULL。3.SELECT 变量1,变量2,变量n语句可以显示变量的值。,SET语句与SELECT语句的区别

13、,SET语句与SELECT语句在为变量赋值的区别在于:一条SET赋值语句只能给一个变量赋值。一条SELECT语句可以给多个变量赋值。约定:当只给一个简单变量赋值时,使用SET赋值语句。当通过查询返回的结果给变量赋值时,使用SELECT赋值语句。,例子,例1:创建局部变量var1,var2,并赋值,然后输出变量的值,DECLARE var1,var2 char(20)SET var1=中国SET var2=var1+是一个伟大的国家SELECT var1,var2,局部变量应用举例,例7-6:创建一个局部变量,并赋一个任意字符串作为局部变量的值。,DECLARE char_var char(20

14、)SET char_var=hello,everyone!SELECT char_var AS char_var变量值为,USE salesDECLARE chazhao varchar(30)SET chazhao=王%SELECT CustomerID,ConnectName,AddressFROM CustomersWHERE ConnectName LIKE chazhao,局部变量应用举例,例7-7:使用 DECLARE语句定义一个名为 chazhao的局部变量,在sales数据库中的Customers表中检索所有姓“王”的客户信息。,【例9-2】从Relationer表中,查询RI

15、D为“20103541”的记录,并为声明两个变量checkid,name赋值。DECLARE name varchar(20),checkid intSELECT checkid=RID,nane=RName FROM Relationer WHERE RID=20103541SELECT checkid,nameGO,7.4 运算符,算术运算符 赋值运算符号 位运算符 字符串串联运算符 比较运算符 逻辑运算符 运算符的优先级,7.4.1 算术运算符 算术运算符可以在任何以数字数据类型分类的表达式间进行各种算术运算算术运算符包括:加(+)、减(-)、乘(*)、除(/)、取模(%),例7-9:求

16、学生年龄,USE XSCJGODECLARE startdate datetimeSET startdate=getdate()SELECT startdate 出生时间 AS 年龄 FROM XS,7.4.2 赋值运算符号 具有唯一一个赋值运算符等号(=)通过运算符可以为变量、表达式、字段重新赋值可以利用赋值运算符为字段分配个标题,例7-10:下面的程序是利用赋值运算符在列标题和为列定义值的表达式之间建立关系即为表中的列设置标题。,USE SALESGOSELECT 客户编号=CustomerID,所在公司=CompanyName,联系人=ConnectName,地址=Address,邮政编

17、码=ZipCode,电话=TelephoneFROM Customers,7.4.3 位运算符,DECLARE var1 int,var2 int,var3 intSET var1=14&20SET var2=20|24SET var3=2410SELECT var1 AS 与运算,var2 AS 或运算,var3 AS 异或运算,7.4.4 字符串串联运算符 字符串串联运算符为(+)允许通过加号在多个字符串间进行字符串串联操作 在串联 varchar、char 或 text 数据类型的数据时,空的字符串被解释为空字符串。如,将 abc+def 存储为 abcdef。如果 sp_dbcmptl

18、evel 兼容性级别设置为 65,那么将空的常量当作一个空格字符,这样就将 abc+def 存储为 abc def。,例7-12:使用串联运算符进行字符串的联接操作。,DECLARE myvar char(20)SET myvar=SQL+SERVER+2000SELECT myvar AS 运算结果为:,7.4.5 比较运算符,USE NorthwindGODECLARE MyProduct intSET MyProduct=20IF(MyProduct 0)SELECT*FROM ProductsWHERE ProductID=MyProductGO,例7-13:利用比较运算符查询Prod

19、ucts表中产品编号为给定值的记录。,运行结果,7.4.6 逻辑运算符,USE salesGODECLARE myvar1 char(6),myvar2 intSELECT myvar1=p0100%,myvar2=1SELECT*FROM ProductsWHERE ProductID like myvar1 AND CategoryID=myvar2,例7-14:使用逻辑运算符查询满足条件的记录。,7.4.7 运算符的优先级,下面将优先级从高到低依次列出:()括号+(正)、-(负)、(按位 NOT)*(乘)、/(除)、%(模)+(加)、(+串联)、-(减)=,=,!=,!,!比较运算符(位

20、异或)、&(位与)、|(位或)NOT AND ALL、ANY、BETWEEN、IN、LIKE、OR、SOME=(赋值),7.5 函数,数学函数 字符串函数 转换函数 日期函数 系统函数 用户自定义函数,7.5.1 数学函数 数学函数通常对输入的数字参数执行某些特定的数学计算,并返回运算结果。SQL系统中经常使用的数学函数如下 ABS(numeric_expression):返回给定数字表达式的绝对值。ASIN、ACOS、ATAN(float_expression):返回反正弦、反余弦、反正切。SIN、COS、TAN、COT(float_expression):返回正弦、余弦、余切。ATAN2(

21、float_expression):返回四个象限的反正切弧度值DEGREES(numeric_expression):将给出的弧度值转化为相应的角度值。,RADIANS(numeric_expression):将给出的角度值转化为相应的弧度值。EXP(float_expression):返回所给的 float 表达式的指数值。LOG(float_expression):返回给定 float 表达式的自然对数。LOG10(float_expression):返回给定 float 表达式的以 10 为底的对数。SQRT(float_expression):返回给定表达式的平方根。CEILING(n

22、umeric_expression):返回大于或等于所给数字表达式的最小整数。FLOOR(numeric_expression):返回小于或等于所给数字表达式的最大整数。ROUND(numeric_expression,length):将给定的数据四舍五入到给定的长度。SIGN(numeric_expression):返回表达式的正(+1)、零(0)或负(-1)号。PI():常量。RAND(seed):返回 0 到1 之间的随机float 值。,7.5.2 字符串函数 ASCII(char_expr):返回字符表达式中第一个字符的 ASCII 代码值。CHAR(integer_expr):返回

23、相同ASCII代码值的字符。CHARINDEX(expr1,expr2,start_location):返回字符串中指定表达式的起始位置。DIFFERENCE(char_expr1,char_expr2):比较两个字符串。LTRIM(char_expr):删字符串前面的空格。LOWER(char_expr):将大写字符数据转换为小写字符数据后返回字符表达式。REPLICATE(char_expr,integer_expr):将字符串表达式重复指定的次数。,RIGHT(char_expr,integer_expr):返回字符串中从右边开始指定个数的字符。REVERSE(char_expr):将字

24、符表达式的求反。RTRIM(char_expr):去掉字符串后边的空格。SOUNDEX(char_expr):返回一个四位数代码,比较两个字符串的相似性。SPACE(integer_expr):返回长度位指定数据的空格串。STUFF(char_expr1,start,length,char_expr2):在char_expr1中,把从位置start开始、长度位length的字符串用char_expr2代替。SUBSTRING(expr,start,length):返回指定表达式中从start位置开始长度位length的部分。STR(float_expr,length,decimal):把数值变

25、成字符串返回,length是总长度,decimal是小数点右边的位数。UPPER(char_expr):返回将小写字符数据转换为大写的字符表达式。,例7-20:USE salesGOSELECT RIGHT(RTRIM(CustomerID),2)AS 客户编号,LEFT(ConnectName,1)AS 客户姓氏,Telephone AS 联 系电话FROM Customers,用函数RIGHT()和LEFT()来查询Customers表中的客户的简单资料。,例7-18:,7.5.3 转换函数利用CAST函数可以将某一个数据类型强制转换为另一种数据类型。CAST(expression AS

26、data_type)CONVERT函数允许用户把表达式从一种数据类型转换为另一种数据类型,并且还在日期的不同显示格式之间进行转换。CONVERT(data_type(length),expression,style)style参数:提供了各种日期显示格式。,USE salesGOSELECT CAST(SUBSTRING(CustomerID,3,1)AS INT)AS 客户编号,ConnectName AS 联系人,Address AS 地址,Telephone AS 联系电话 FROM CustomersWHERE CAST(SUBSTRING(CustomerID,3,1)AS INT)

27、8,例7-22:查询Custmoers表中的记录值,对CustmoerID字段值从第三位开始截取并将结果转换为数值类型。,7.5.4 日期函数,订单编号 客户编号 订购时间-10248 c01 256天10249 c02 255天10250 c03 252天10251 c02 252天10252 c04 251天10253 c03 250天10254 c05 249天10255 c04 248天,例7-25:显示Orders表中所有的订单到当前日期的天数。,USE salesGOSELECT OrderID AS 订单编号,CustomerID AS 客户编号,STR(DATEDIFF(day

28、,OrderDate,getdate()+天AS 订购时间FROM OrdersGO,7.5.5 系统函数 COALESCE:返回其参数中第一个非空表达式。COL_NAME::返回表中指定字段的名称,即列名。COL_LENGTH:返回指定字段的长度值。DB_ID:返回数据库的编号。DB_NAME:返回数据库的名称。DATALENGTH:返回任何数据表达式的实际长度。GETANSINULL:返回数据库原默认空值设置。HOST_ID:返回服务器端计算机的ID号。HOST_NAME:返回服务器端计算机的名称。IDENT_INCR:返回表中标识性字段的增值量。IDENT_SEED:返回表中标识性字段的

29、初值。ISDATE:检查给定的表达式是否为有效的日期格式。,ISNULL:用指定值替换表达式中的指定空值。INDEX_COL:返回索引的列名。ISNUMERIC:检查给定的表达式是否为一个有效的数字格式。NULLIF:如果两个指定的表达式相等,则返回空值。OBJECT_ID:返回数据库对象的编号。OBJECT_NAME:返回数据库对象的名称。SUSER_SID:返回服务器用户的安全帐户号。SUSER_NAME:返回服务器用户的登录名。USER_ID:返回用户的数据库ID号。USER_NAME:返回用户的数据库用户名。STATS_DATE:返回最新的索引统计日期。,以上命令行执行的结果为:Sal

30、esPerson表中的第二列字段名为:-Salename,例7-27:用COL_NAME函数返回SalesPerson表中的第二列的字段名,USE SalesPersonGOSELECT COL_NAME(OBJECT_ID(SalesPerson),2)AS Salers表中的第二列字段名为:,例7-29:检查master数据库中的系统表sysdatabases中的每一个数据库,使用数据库标识号来确定数据库名称。,USE masterSELECT dbid,DB_NAME(dbid)AS DB_NAMEFROM sysdatabasesORDER BY dbid,运行结果,7.5.6 用户自

31、定义函数CREATE FUNCTION 语句创建函数ALTER FUNCTION 语句修改函数DROP FUNCTION 语句除去函数,自定义函数的基本概念用户自定义函数是为了实现某些功能,用户对多个T-SQL语句进行封装,并返回结果。用户自定义函数与存储过程的比较:,SQL Server 2008,自定义函数的基本概念使用用户定义函数的优点如下:模块化程序设计:将特定的功能封闭在一个用户定义函数中,并存储在数据库中。这个函数只需创建一次,以后便可以在程序中多次调用。并且用户定义函数可以独立于程序源代码进行修改。执行速度快:与存储过程相似,用户定义函数实施缓存计划。即用户定义函数只需编译一次,

32、以后可以多次重用,从而降低了T-SQL代码的编译开销。这意味着每次使用用户定义函数时均无需重新解析和重新优化,从而缩短了执行时间。减少网络流量:和存储过程一样可以减少网络通信的流量。此外,用户定义函数还可以用在WHERE子句中,在服务器端过滤数据,以减少发送至客户端的数字或行数。,SQL Server 2008,自定义函数的基本概念定义函数的分类:标量值函数:标量值函数的返回值是返回子句(RETURNS子句)中定义的类型的单个数据值,不能返回多个值。内嵌表值函数:内嵌表值函数返回的是在RETURNS子句中指定的“table”类型的数据行集(表)。在内嵌表值函数中,RETUAN子句在括号中含有一

33、条单独的SELECT查询语句,该语句的结果构成了内嵌表值函数所返回的表。多语句表值函数:与内嵌表值函数一样,多语句表值函数返回的是由选择结果构成的数据行集(表)。与内联表值函数不同的是,多语句表值函数在返回语句之前还有其他的TSQL语句,并且RETURNS子句指定的表带有列及其数据类型。,SQL Server 2008,创建自定义函数创建标量值函数:标量值函数的函数体由一条或多条TSQL语句组成,写在BEGIN与END之间。其语法格式如下:CREATE FUNCTION(形参名 数据类型,n)RETURNS 返回值数据类型WITH ENCRYPTIONASBEGIN RETURN 返回表达式E

34、ND,SQL Server 2008,参数说明如下:返回值的数据类型不能是text、ntext、image和timestamp类型。在BEGINEND之间,必须有一条RETURN语句,用于指定返回表达式,即函数的值。,创建自定义函数创建标量值函数:【例6】定义函数EProduct_Number,当给出一个客户ID,返回该客户所拥有的产品数量。【分析】该自定义函数接收的参数是客户ID,数据类型应与EProduct中的CID一致;返回的值是产品数,该数据量一般不大,可以设为smallint类型。代码如下:CREATE FUNCTION EProduct_Number(EP_CID int)RETU

35、RNS smallintASBEGIN DECLARE epnum smallint SELECT epnum=count(*)FROM EProduct WHERE CID=EP_CID RETURN epnumENDGO,创建自定义函数创建内联表值函数:语法格式如下:CREATE FUNCTION(形参名 数据类型,n)RETURNS TableWITH ENCRYPTIONAS RETURN(SELECT查询语句)参数说明如下:内联表值函数没有函数体。RETURNS Table子句说明返回值是一个表。RETURN子句中的SELECT语句是返回表中的数据。,SQL Server 2008,

36、创建自定义函数创建内联表值函数:【例10-7】定义函数EProduct_Table,当给出一个客户ID,返回该客户所拥有的产品号码。代码如下:CREATE FUNCTION EProduct_Table(EP_CID int)RETURNS TableAS RETURN(SELECT ENO,EName FROM EProduct WHERE cid=EP_CID,SQL Server 2008,创建自定义函数创建多语句表值函数:语法格式如下:CREATE FUNCTION(形参名 数据类型,n)RETURNS 返回变量 Table(表结构定义)WITH ENCRYPTIONASBEGIN R

37、ETURNEND参数说明如下:RETURNS 返回变量子句指明该函数的返回局部变量,该变量的数据类型是Table,而且在该子句中还需要对返回的表进行表结构的定义。在BEGINEND之间的语句是函数体,函数体中必须包括一条不带参数的RETURN语句用于返回表。,SQL Server 2008,创建自定义函数创建多语句表值函数:【例10-8】定义多语句表值函数EProduct_Table_1,完成上例功能。代码如下:CREATE FUNCTION EProduct_Table_1(EP_CID int)RETURNS tb Table-定义tb表变量的结构,其中的列名可以和原数据表名不一样,但数据

38、类型要一致。(tb_Eno char(11),tb_EName varchar(50),tb_EJoinData DateTime)ASBEGIN INSERT INTO tb SELECT ENO,EName,EJoinDate FROM EProduct WHERE CID=EP_CID RETURNEND,SQL Server 2008,创建自定义函数创建多语句表值函数:【例10-8】定义多语句表值函数EProduct_Table_1,完成上例功能。查看多语句表值函数:多语句表值函数创建后,可以在SQL Server实例中,依次展开“数据库”“BillingSys”“可编程性”“函数”“

39、表值函数”节点,即可看到dbo.EProduct_Table_1函数。,SQL Server 2008,创建自定义函数使用菜单命令创建函数:在“对象资源管理器”中也可以完成创建函数的操作:新建标量值函数 新建表值函数,SQL Server 2008,修改和删除自定义函数查看用户自定义函数:sp_help 函数名称:用于查看函数的一般信息,如函数的名称及相关参数。sp_helptext 函数名称:用于查看函数的正文信息。,SQL Server 2008,修改和删除自定义函数修改用户自定义函数:语法格式如下:ALTER FUNCTION(形参名 数据类型,n)RETURNS 返回值数据类型WITH

40、 ENCRYPTIONASBEGIN RETURN 返回表达式END删除用户自定义函数:语法格式如下:DROP FUNCTION 使用菜单命令管理自定义函数:在“对象资源管理器”中选择需要修改或删除的自定义函数,右击,选择相应的菜单命令执行操作即可。,SQL Server 2008,调用用户自定义函数的基本语法为:变量=用户名.函数名(实际参数列表),注意:在调用返回数值的用户自定义函数时,一定要在函数名的前面加上用户名,否则会出现“函数名不是可以识别的函数名”的错误提示信息。,用户自定义函数应用举例,CREATE FUNCTION TOTAL(expr1 AS int,expr2 AS in

41、t)RETURNS intBEGINDECLARE my_total intSELECT my_total=expr1+expr2RETURN my_totalENDGO用命令行调用TOTAL()函数:SELECT dbo.TOTAL(10,20)AS 两数之和执行结果如下:两数之和-30,例7-30:创建自定义函数TOTAL()用来计算任意两数之和。,用户自定义函数应用举例,USE salesGOCREATE FUNCTION proid(id char(6)RETURNS TABLEASRETURN(SELECT*FROM Products WHERE ProductID=id),例7-3

42、1:创建函数proid()返回一个表。,用SELECT语句调用该函数显示产品编号为p02001的产品信息:SELECT*FROM dbo.proid(p02001)执行结果为:ProductID ProductName CategoryID Price stocks-p02001 蚝油 2 19.0000 270,7.6 流控制语句和批处理,批处理语句 流程控制语句,7.6.1 批处理语句利用批处理语句来提高程序的执行效率。批处理是使用GO语句将多条SQL语句进行分隔,其中每两个GO之间的SQL语句就是一个批处理单元。一个批处理中可以只包含一条语句,也可以包含多条语句,当利用批处理时注意以下规

43、则:CREATE DEFAULT、CREATE PROCEDURE、CREATE RULE、CREATE TRIGGER 和 CREATE VIEW 语句不能在批处理中与其它语句组合使用。批处理必须以 CREATE 语句开始。所有跟在该批处理后的其它语句将被解释为第一个 CREATE 语句定义的一部分。不能在同一个批处理中更改表,然后引用新列。如果 EXECUTE 语句是批处理中的第一句,则不需要 EXECUTE 关键字。如果 EXECUTE 语句不是批处理中的第一条语句,则需要 EXECUTE 关键字。在书写批处理语句时,需要使用GO语句作为批处理命令的结束标志。,USE pubsGO CR

44、EATE VIEW auth_titlesASSELECT*FROM authorsGO SELECT*FROM auth_titlesGO,例7-33:下例使用批处理创建一个视图因为 CREATE VIEW 必须是批处理中的唯一语句,所以需要 GO 命令将 CREATE VIEW 语句与其周围的 USE 和 SELECT 语句隔离。,批处理结束标志,USE salesGOSELECT*FROM Orders GOSELECT CategoryID AS 产品类别,CategoryName AS 产品名称,Description AS 产品描述 FROM CategorisWHERE Cate

45、goryID=4GO,例7-34:利用批处理语句查询表中的信息,7.6.2 流程控制语句 顺序执行 条件分支 循环和跳转,顺序语句:SET语句SET语句有两种用法:(1)给局部变量赋值(2)设定用户执行T-SQL命令时SQL Server的处理选项,一般有以下几种设定方式:SET 选项 ON:选项开关打开。SET 选项 OFF:选项开关关闭。SET 选项 值:设定选项的具体值。例如:设置显示/隐藏受T-SQL语句影响的行数消息语句,其语法如下:SET NOCOUNT(ON|OFF),SQL Server 2008,顺序语句:SELECT输出语句SELECT作为输出使用时的语法如下:SELECT

46、 表达式1,表达式2,表达式nPRINT输出语句PRINT用于向屏幕输出信息,其语法如下:PRINT 表达式,SQL Server 2008,顺序语句:注释语句注释语句是对程序的说明解释,增加程序的可读性。单行注释格式:-注释信息单行注释常跟在一条语句后。多行注释格式:/*注释 信息*/包含在“/*”、“*/”的注释信息可以是多行的,SQL Server 2008,7.6.2 流程控制语句 BEGINEND语句 IFELSE语句 CASE语句 WHILECONTINUEBREAK语句 GOTO语句 WAITFOR语句 RETURN语句,BEGINEND语句 包括一系列的 Transact-SQ

47、L 语句组成的一个语句块,其中:sql_statement|statement_block 是任何有效的 Transact-SQL 语句或以语句块定义的语句分组。,语法格式如下所示:BEGIN sql_statement|statement_block END,DECLARE ErrorSaveVariable intIF(ERROR 0)BEGIN SET ErrorSaveVariable=ERROR PRINT Error encountered,+CAST(ErrorSaveVariable AS VARCHAR(10)END,例7-35:在IF 语句中应用BEGINEND语句。,BE

48、GIN.END 语句块允许嵌套使用;BEGIN 和 END 语句必须成对使用,任何一条语句均不能单独使用,IFELSE语句 IFELSE语句是条件判断语句 语法形式如下所示:其中参数:Boolean_expression是返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来;sql_statement|statement_blockTransact-SQL 语句或用语句块定义的语句分组。,IF Boolean_expressionsql_statement|statement_block ELSE sql_statemen

49、t|statement_block,USE salesIF(SELECT AVG(price)FROM Products WHERE CategoryID=1)4 END,例7-36:,7.6.2 流程控制语句CASE语句 CASE 语句是用于多重选择的条件判断语句,结果返回单个值,其语法形式 1:CASE WHEN 逻辑表达式值1 THEN 返回表达式1 WHEN 逻辑表达式值2 THEN 返回表达式2 ELSE 返回表达式nEND,其语法形式 2:CASE 输入表达式 WHEN 表达式值1 THEN 返回表达式1 WHEN 表达式值2 THEN 返回表达式2 ELSE 返回表达式nEND,

50、功能:计算CASE输入表达式,将其值按指定顺序与WHEN表达式的值进行比较运算。,功能:按指定顺序对每个WHEN子句求逻辑表达式的值。,USE salesGOSELECT OrderID AS 订单编号,ProductID AS 产品编号,销售情况=CASE WHEN Quantity=100 THEN 销售情况优秀 WHEN Quantity=70 THEN 销售情况良好 WHEN Quantity=50 THEN 销售情况一般 WHEN Quantity50 THEN 销售情况较差 END FROM OrderDetailsORDER BY OrderID,例7-36:应用搜索CASE语句

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号