当前位置:
文档之家› Ch8-1补充 09101数据库系统原理及应用-语法与流程控制
Ch8-1补充 09101数据库系统原理及应用-语法与流程控制
§ @@SPID:返回当前用户进程的服务器进程标识符 (ID)。 § @@ROWCOUNT:返回受上一语句影响的行数。 § @@NESTLEVEL:返回当前存储过程执行的嵌套层次(初 始值为0)。 § @@LANGUAGE:返回当前使用的语言名。 § @@OPTIONS:返回当前 SET 选项的信息。 § @@CPU_BUSY:返回自上次启动 SQL Server 以来 CPU 的工作时间,单位为毫秒(基于系统计时器的分辨率)。 § @@IDLE:返回 SQL Server 自上次启动后闲置的时间, 单位为毫秒(基于系统计时器的分辨率)。 § @@IDENTITY:返回最后插入的标识值。
一、批处理命令
§批处理是多条Transact-SQL语句构成的集 合。SQL Server将批处理语句进行编译形 成一个可执行单元,称为执行计划。 §执行计划中的语句一次执行每一条语句, 如果在编译过程中出现语法错误,那么批处 理中所有的语句均无法正常执行。如果在运 行阶段出现错误时,一般都会中断当前以及 其后语句的执行,只有在少数情况下,如违 反约束时,仅中断当前出错的语句而继续执 行其他语句。
二、注释
§注释是程序代码中不执行的文本字符串。 在SQL Server中,可以使用两种类型的注 释字符:
一种是ANSI标准的注释符‚--”,它用于单行注 释; 另一种是与C语言相同的注释符号,即‚/* */”。
注释语句
§嵌于行内的注释语句
示例 1 SELECT productname , (unitsinstock - unitsonorder) -- 计算存货 , supplierID FROM products GO
INSERT INTO jobs (job_desc,min_lvl,max_lvl) VALUES ('Accountant',12,125) SELECT @@IDENTITY AS 'Identity'
§①全局变量不是由用户的程序定义的,它 们是在服务器级定义的。 §②用户只能使用预先定义的全局变量。 §③引用全局变量时,必须以‚@@”开头。 §④局部变量的名称不能与全局变量的名称 相同,否则会在应用程序中出现不可预测的 结果。
以@开头的标识符代表局部变量或参数 以@@开头的标识符代表全局变量或参数 以#开头的标识符代表临时表或存储过程 以##开头的标识符代表一个全局临时对象
§限定标识符
当对象名称包含空格时 当保留关键字被用作对象名或对象部分的名字时
限定标识符
§限定标识符可以
用中括号表示的括号标识符([ ])
§块注释语句
示例 2
/* 这部分代码检索产品表的所有行并且显示单价,增加了10%的单价和产品名 称。 */ USE northwind SELECT unitprice, (unitprice * 1.1), productname FROM products GO
三、标识符
§标准标识符:第一个字符必须是字母(a~z 或 A~Z),第一个字符后可以是数字、字母或各种符 号 §特殊标识符:当标识符的第一个字符是符号时, 代表它有特殊用处
五、常量
§常量,也称为字面值或标量值,是表示一个特定数据 值的符号,在运行过程中其值不会变的量。 §常量的格式取决于它所表示的值的数据类型。包 括:字符型常量,整型常量, 实型常量,日期常 量等。 §Example: ‘This is …’ 12 12.3 ‘2002-09-09’
六、变量
§变量对于一种语言来说是必不可少的组成 部分。 §变量有两种形式,
SELECT * FROM [含空格的表名]
用双引号表示的引用标识符(‚ ‛) SELECT * FROM “含空格的表名”
标识符的命名原则
§使用短的名字 §尽量使用有意义的名字 §使用简单明了的命名约定 §使用能够区分出对象类型的标识符
视图 存储过程
§保持对象名和用户名的一致性
sales 表和 sales 角色
EXECUTE /EXEC用于执行用户定义的函数、系统存储过程、 用户自定义存储过程或一个扩展的存储过程。在一个 Transact-SQL 批处理内部,EXEC 能控制一个字符串的运行
一个完整的批处理需要使用GO语句作为结束标记。
GO实际上并不是 Transact-SQL 语句,向 SQL Server 描述由 Transact-SQL 语句组成的批处理
局部变量:用户自己使用DECLARE语句定义, 名字前要有一个标记符‚@”。 全局变量:系统提供的,引用全局变量时,名 字前要有两个标记符‚@@”。
局部变量
§局部变量只具有局部作用范围
只能在定义它的语句、批处理或过程中使用
§用 DECLARE @ 语句定义局部变量 §用 SET 或 SELECT @ 语句给局部变量赋值 §【例】创建局部变量@var1、@var2,并赋值, 然后输出变量的值。 DECLARE @var1 varchar(20),@var2 varchar(40) SET @var1='中国' /*一个SET语句只能给一个变 量赋值*/ SET @var2=@var1+'是一个伟大的国家' select @var1,@var2 go
全局变量
§全局变量:用两个 @ 标识,由 SQL Server 提供,用户不能创建全局变量
设置变量
提供 SQL Server 当前各种特性和参数的设置信息
统计变量
提供 SQL Server 自启动后的运行信息
系统变量
提供最近对表操作的信息
一些常用的全局变量:
§ @@CONNECTIONS:返回自上次启动SQL Server以来 连接或试图连接的次数。 § @@MAX_CONNECTIONS:返回SQL Server上允许的同 时用户连接的最大数。 § @@ERROR:返回最后执行的 T-SQL 语句的错误代码。 § @@TRANCOUNT:返回当前连接的活动事务数。 § @@VERSION:返回 SQL Server 当前安装的日期、版本 和处理器类型。 § @@SERVERNAME:返回运行 SQL Server 的本地服务 器名称。 § @@SERVICENAME:返回 SQL Server 正在其下运行的 注册表键名。若当前实例为默认实例,则 返回 MSSQLServer;若当前实例是命名实例,则该函数返回实 例名。
四、数据类型
§ 数字型:包括各种整数如 int、tinyint、smallint 和 bigint § 日期型:包括 datetime 和 smalldatetime § 字符型:包括 char、nchar、varchar 和 nvarchar § 二进制型:在存储与结构上与字符型数据相似,包括 binary 和varbinary § 惟一标识符(GUID):代表一个全局的特殊标识符,是一 个16 位16 进制的值 § SQL 变量:代表 SQL Server 所支持的各种数据类型 § 图像和文本:属于大型二进制对象结构(BLOB),代表 定长或变长的数据类型 § 表:代表一个表结构,在 SQL Server 2000 中,可以把表 保存在字段中 § 游标:用于存储过程的编程中,也会和低层客户接口同时 使用。游标从不用于数据定义语言(DDL)语句中 § 用户自定义数据类型:基于系统数据类型,由数据库管理 员生成
数据操纵语言语句
§数据操纵语言语句,用来在数据库中操纵各种对 象,检索和修改数据,这些语句包括SELECT、 INSERT、UPDATE、DELETE等。这些语句都是 操纵数据库的最常用到的语句。
语句 功能 说明
SELECT
从表或视图中检索数据
是使用最频繁的SQL语句 之一 既可修改表或视图的一行 数据,也可修改一组或 全部数据 可根据条件删除指定的数 据
SQLServer2005编程—语 法与流程控制
Transact-SQL语言的特点
§Transact-SQL语言是微软对SQL语言的扩展。 §Transact-SQL语言是一种交互式查询语言,具有 功能强大、简单易学的特点。 §Transact-SQL语言有4个特点:
一是一体化的特点,集数据定义语言、数据操纵语言、 数据控制语言和附加语言元素为一体。 二是两种使用方式,交互式和嵌入到高级语言的使用方 式。前者适合于非数据库专业人员使用,后者适合于数 据库专业开发人员使用。 三是非过程化语言,只需要提出‚干什么‛,不需要指 出‚如何干‛,语句的操作过程由系统自动完成。 四是,类似于人的思维习惯,容易理解和掌握。
Transact-SQL语言的组成元素
§数据控制语言语句 §数据定义语言语句 §数据操纵语言语句 §附加的语言元素
数据控制语言语句
§ 安全性管理是分布式数据库系统的重要特征。安全性管理 就是确保数据库中的数据和操作不能被未授权的用户使用 和执行。 § 数据控制语言语句就是用来进行安全性管理,它可以确定 哪些用户可以查看或修改数据、或执行数据库中的操作等, 这些语句主要包括GRANT、DENY、REVOKE等语句。 语句 功能 GRANT 授予权限 说明 可把语句许可或对象许可的权限授 予其他用户和角色 与GRANT的功能相反,但不影响该 REVOK 收回权限 用户或角色从其他角色中作为成 E 员继承许可权限 DENY 收回权限,并 功能与REVOKE相似,不同之处: 禁止从其他 除收回权限外,还禁止从其他角 角色继承许 色继承许可权限 可权限
【例】创建一个名为sex的局部变量,并在 SELECT 语句 中使用该局部变量查找表student中所有女同学的学号、姓名。 DECLARE @sex char(2) SET @sex='女' SELECT SNO,SNAME FROM student WHERE SSEX=@sex GO
【例】使用查询给变量赋值。 =(SELECT SNAME FROM student WHERE SNO='200215121') SELECT @student GO 用SELECT语句赋值 语法格式: SELECT {@local_variable=expression} [,…n]