资源预览内容
第1页 / 共91页
第2页 / 共91页
第3页 / 共91页
第4页 / 共91页
第5页 / 共91页
第6页 / 共91页
第7页 / 共91页
第8页 / 共91页
第9页 / 共91页
第10页 / 共91页
亲,该文档总共91页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第11章 SQL Server程序设计,11.1 程序注释语句 11.2 批 处 理 11.3 事 物 11.4 变 量 11.5 程序控制语句 11.6 游 标 11.7 用户自定义函数,11.1 程序注释语句,注释语句是不可执行语句,SQL Server不对其进行编译,因此无论注释语句的内容是否与一般SQL语句相同,都不会参与SQL Server的执行。注释语句在查询分析器中用绿色字体显示。注释语句有两种类型:,- 类型:这是两个英文短横线,在 - 后书写注释语句内容,不能换行,仅用于单行注释语句的书写。注意短横线之间不能有空格。 /* */ 类型:在两个星号之间书写注释语句内容,可以换行,用于多行注释语句的书写。,11.2 批 处 理,批是一个以GO为结束标志的SQL语句组,批中的所有SQL语句作为一个整体编译成一个执行单元后一次提交给SQL Server服务器执行。,执行一个批时,若其中有一个语句出现编译错误,则SQL Server将取消该批内所有语句的执行。但若一个批通过了编译而在运行时出现错误,则批内发生错误之前的语句将被执行,发生错误的语句不被执行,发生错误之后的语句视具体情况可能被执行或不被执行。,因此,对于仅执行了一部分的批,可能引起整个过程发生错误或产生数据垃圾。为防止这类情况出现,可以在SQL Server编程中引入“事物”,将批处理放在一个事物中,并设置批处理发生错误时引发事物回滚,使所有尚未提交的操作都回滚到发生错误之前的状态。,11.3 事 物,事物是SQL Server 的一个工作单元,一个事物内的所有语句作为一个整体执行。事物通常以BEGIN TRANSACTION开始,以COMMIT TRANSACTION结束。如果在一个事物模块中有一个SQL语句执行失败或发生不该有的结果,,可以通过设置回滚命令ROLLBACK TRANSACTION取消该语句导致的错误操作结果(例如取消已插入的数据或恢复已被修改的数据),使数据库恢复到该错误语句执行前的状态。 一个批可以包含多个事物,一个事物也可以包含多个批。两者的区别是,批语句的组合发生在编译阶段,而事物语句的组合发生在执行阶段。,一个批若在编译阶段发生语法错误,则在运行阶段整个批都不能执行。若编译通过而在运行时发生错误,如违反主键惟一性约束等,则有两种情况:若没有设置事物回滚,默认时系统仅回滚发生错误的语句;若设置了事物回滚,则系统回滚事物。,SQL Server有三种事务模式: (1)提交事务。 (2)隐性事务。 (3)显式事务。,本节仅介绍显式事物的四个语句,即开始事务、设置保存点、回滚事物、提交事物。 (1)开始(或启动)一个事物单元。 命令格式: BEGIN TRANSACTION transaction_name ,(2)在事物中设置一个保存点。 命令格式: SAVE TRANSACTION savepoint_name (3)回滚一个事物单元。 命令格式: ROLLBACK TRANSACTION transaction_name | savepoint_name ,(4)提交(或完成)一个事物单元。 命令格式: COMMIT TRANSACTION transaction_name ,11.4 变 量,SQL Server 的变量有两种,局部与全局变量。局部变量是在批或存储过程中声明与使用的,而全局变量是一种由SQL Server提供的特殊函数。,11.4.1 局部变量 局部变量是在批或存储过程内由用户定义并使用的变量。用户在使用局部变量前必须事先声明,而它的使用范围也仅限于声明它的批或存储过程以内。 1声明局部变量 命令格式: DECLARE ( variable_name datatype ,. n ),命令说明: (1)DECLARE :该关键字表示将要声明变量。 (2)variable_name:表示局部变量名,它必须以一个开头。,(3)datatype:数据类型可以是除text、ntext和image外的数据类型或用户定义的数据类型。 (4),. n:表示一个DECLARE语句中可以声明多个局部变量,这些变量用逗号相隔。,2局部变量的赋值 声明局部变量后,系统自动为变量赋初值NULL。若需要另外赋值,可以使用SET或SELECT语句。赋值语法如下:,命令格式: SELECT variable_name = expression FROM table_name ,. n WHERE clause ,. n 或 SET variable_name = expression,命令说明: (1)expression:该表达式可以是一个具体的数据如数字、字符串等,也可以是一个表达式或另一个局部变量或全局变量,还可以是从一个查询语句中查询出来的数据。 (2)FROM子句用于向变量所赋的值源于由一个表中查询所得数据的情形。,(3)一个SELECT语句可以为多个变量赋值,但一个SET语句仅能为一个变量赋值。若使用SELECT语句为变量赋值,则不能与其查询功能同时使用。若使用SELECT语句从表中取数为变量赋值,则其返回的数据必须惟一,否则仅将最后一个数据赋给变量。,11.4.2 全局变量 全局变量以开头。在SQL Server中全局变量作为一种特殊函数由系统预先定义。全局变量的作用范围是整个系统,通常利用全局变量来检测系统的设置值或执行查询命令后的状态值。,11.5 程序控制语句,11.5.1 BEGINEND语句 BEGIN.END语句相当于其他计算机语言中的大括号或复合语句,它将多条T-SQL语句封装成为一个整体的语句块,T-SQL中允许使用嵌套的BEGIN.END语句。通常把BEGIN.END语句放在语句IF.ELSE或者WHILE中,使其中的语句作为一个整体来执行。,命令格式: BEGIN T-SQL 语句块 END 命令说明: (1)BEGIN、END分别表示语句块的开始和结束。 (2)T-SQL语句块可以是一条或一条以上的T-SQL 语句。,11.5.2 PRINT语句 PRINT语句用于将用户定义的消息返回到客户端。 命令格式: PRINT any ASCII text | local_variable | global_ variable | string_expr,命令说明: (1)any ASCII text:表示一个文本字符串。 (2)local_variable:是一个局部变量,必须是 char 或 varchar型,或是能够隐性转换为这些数据类型的变量。,(3) global_ variable:是全局变量,必须是 char 或 varchar类型,或者能够隐性转换为这些数据类型。 (4)string_expr:是返回字符串的表达式。可以是由加号(+)连接起来的字符串和字符型变量。,11.5.3 IFELSE语句 IF.ELSE 结构是一种选择结构,用于进行条件判断,它可以用于批处理、存储过程或特殊查询,并且可以嵌套使用。 命令格式: IF boolean_expression sql_statement | statement_block ELSE sql_statement | statement_block ,命令说明: (1)boolean_expression:是返回“真”(TRUE)或“伪”(FALSE)的布尔表达式。如果布尔表达式中含有SELECT语句,则必须用圆括号将SELECT语句括起来。 (2)sql_statement | statement_block:只能是一条T-SQL 语句或一个BEGINEND语句块。,11.5.4 WHILE语句 WHILE 语句是一种条件循环语句,在满足条件时执行循环体,不满足条件时跳出循环结构。WHILE 语句可以嵌套执行,嵌套时首先运行内层循环,内层循环结束之后再运行外层循环。,命令格式: WHILE Boolean_expression sql_statement | statement_block 命令说明: sql_statement | statement_block 为循环体,只能是一条语句或一个语句块。,11.5.5 GOTO语句 GOTO语句需要和语句标号共同使用,可用于IF语句、WHILE语句、语句块或过程中的任何位置。程序执行到GOTO语句时,将跳转到语句标号所指示的语句继续执行,而不是执行GOTO语句后面的语句。GOTO 语句可以嵌套使用,但不可以跳转到批处理之外的标号处。,(1)定义标号。将语句标号置于T-SQL语句之前,用于标明该语句,语法如下。 命令格式: label : 命令说明: label表示语句标号,语句标号必须符合标识符规则,该标号后面一定要有冒号。,(2)跳转到标号处。程序执行到此语句时,将跳转到语句标号所标明的语句处。 命令格式: GOTO label,11.5.6 BREAK语句与CONTINUE语句 BREAK 语句可以放在WHILE 循环体内的任何位置,程序执行到BREAK 语句时将跳出到最外层的循环体以外,即终止执行WHILE语句中的所有内容,转而执行WHILE语句之后的其他语句。,CONTINUE语句也可以放在WHILE 循环体内的任何位置,其作用是终止执行本次循环从而不执行CONTINUE 关键字后、位于本循环体内的语句,重新开始执行下一次循环。,11.5.7 CASE语句 1简单CASE函数 命令格式: CASE input_expression WHEN when_expression THEN result_expression . n ELSE else_result_expression END,命令说明: (1)input_expression:输入表达式,用于进行比较。 (2)WHEN 后面给出用于进行比较的表达式when_expression。input_expression 和每个 when_expression 的数据类型必须相同,或者能够隐性转换。,(3)THEN后面给出当 input_expression = when_expression为 真(TRUE)时系统返回的结果表达式result_expression。 (4).n 表示可以有多个WHEN . THEN结构。,(5)ELSE后面给出当比较运算input_expression = when_expression的取值全部为(FALSE)时系统返回的结果表达式else_result_expression。如果省略此参数并且比较运算取值不为TRUE,CASE将返回NULL值。else_result_expression和所有result_expression的数据类型必须相同,或能够隐性转换。,2CASE 搜索函数 命令格式: CASE WHEN Boolean_expression THEN result_expression .n ELSE else_result_expression END,命令说明: (1)WHEN 后面给出用于判断的逻辑表达式Boolean_expression。 (2)THEN后面给出当 input_expression = Boolean_expression为 TRUE 时所返回的一个结果表达式result_expression。 (3)其余选项的含义与简单 CASE 函数相同。,11.5.8 RETURN语句 RETURN语句用于从当前过程、批处理或语句块中无条件退出,并不再执行位于RETURN之后的语句。 命令格式: RETURN integer_expression ,命令说明: (1)可选项integer_expression表示返回一个整型表达式的值。 (2)RETURN一般用于从存储过程
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号