1、 程序清单如下: /*T表(教师基本情况表)的结构为T(TNO,TN,SEX,AGE,PROF,SAL,DEPT)分别表示教师的编号,姓名,性别,年龄,职称,工资,系别。TC表(教师授课表)的结构为TC(TNO,CNO)分别表示教师的编号,课程编号。 UPDATE T SET SAL=SAL+100 WHERE TNO IN (SELECT T.TNO FROM T,TC WHERE T.TNO=TC.TNO AND TC.CNO=C5) /*通过连接查询找到讲授C5课程的教师编号。下面是删除一行记录的例子。 例3-14 删除张益琳教师的记录。 DELETE FROM T WHERE TN=
2、张益琳例3-16 删除李明同学选课的记录。 DELETE FROM SC WHERE SNO= (SELECT SNO FROM S WHERE SN= 李明)三、数据控制语言数据控制语言(DCL)是用来设置或更改数据库用户或角色权限的语句,包括GRANT,DENY,REVOKE等语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行数据控制语言。3.1 语句权限与角色的授予 SQL语言使用GRANT语句为用户授予语句权限的语法格式为: GRANT | , TO |PUBLIC, WITH ADMIN OPTION其语
3、义为:将指定的语句权限授予指定的用户或角色。其中:(1)PULBIC代表数据库中的全部用户;(2)WITH ADMIN OPTION为可选项,指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。例3-17给用户 Mary 和 John 以及 Windows NT 组 CorporateBobJ 授予多个语句权限。 GRANT CREATE DATABASE, CREATE TABLE TO Mary, John, CorporateBobJ例3-18 为用户ZhangYiLin授予CREATE TABLE的语句权限。 GRANT CREATE TABLE TO ZhangYiL
4、in 同语句权限的授予类似,SQL语言使用GRANT语句为用户授予对象权限,其语法格式为: GRANT ALL|(列名,列名),ON WITH ADMIN OPTION 将指定的操作对象的对象权限授予指定的用户或角色。 (1)ALL代表所有的对象权限。 (2)列名用于指定要授权的数据库对象的一列或多列。如果不指定列名,被授权的用户将在数据库对象的所有列上均拥有指定的特权。实际上,只有当授予INSERT、UPDATE权限时才需指定列名。 (3)ON子句用于指定要授予对象权限的数据库对象名,可以是基本表名、视图名等。 (4)WITH ADMIN OPTION为可选项,指定后则允许被授权的用户将权限
5、再授予其他用户或角色。例3-19在权限层次中授予对象权限。首先,给所有用户授予 SELECT 权限,然后,将特定的权限授予用户 Mary,John 和 Tom。 GRANT SELECT ON s TO public GO GRANT INSERT, UPDATE, DELETE TO Mary, John, Tom GO例3-20 将查询T表和修改教师职称的权限授予USER3,并允许将此权限授予其他用户。 GRANT SELECT,UPDATE(PROF) ON T TO USER3 WITH ADMIN OPTION上例中,USER3具有此对象权限,并可使用GRANT命令给其他用户授权,如
6、下例,USER3将此权限授予USER4: ON T TO USER4 数据库管理员可以使用REVOKE语句收回语句权限,其语法格式为: REVOKE FROM 例:收回用户ZHANGYILIN所拥有的CREATE TABLE的语句权限。 REVOKE CREATE TABLE FROM ZHANGYILIN所有授予出去的权力在必要时都可以由数据库管理员和授权者收回,收回对象权限仍然使用REVOKE语句,其语法格式为:例3-21 收回用户USER1对C表的查询权限。REVOKE SELECT ON CFROM USER1例3-22 收回用户USER3查询T表和修改教师职称的权限。REVOKE S
7、ELECT,UPDATE(PROF)ON TFROM USER3在上例中,USER3将对T表的权限授予了USER4,在收回USER3对T表的权限的同时,系统会自动收回USER4对T表的权限。例3-23首先从 public 角色中收回 SELECT 权限,然后,收回用户 Mary,John 和 Tom 的特定权限。USE pubs GOREVOKE SELECT ON s FROM publicREVOKE INSERT, UPDATE, DELETE ON s FROM Mary, John, TomDENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继
8、承权限。否定语句权限的语法形式为: DENY ALL|否定对象权限的语法形式为:例3-24首先给 public 角色授予 SELECT 权限,然后,拒绝用户 Mary,John 和 Tom 的特定权限。 USE pubs DENY SELECT, INSERT, UPDATE, DELETE TO Mary,John,Tom四、系统存储过程系统存储过程的部分示例如下:sp_addtype:用于定义一个用户定义数据类型;sp_configure:用于管理服务器配置选项设置;xp_sendmail:用于发送电子邮件或寻呼信息;sp_stored_procedures:用于返回当前数据库中的存储过程
9、的清单;sp_help:用于显示参数清单和其数据类型;sp_depends:用于显示存储过程依据的对象或者依据存储过程的对象;sp_helptext:用于显示存储过程的定义文本;sp_rename:用于修改当前数据库中用户对象的名称。五、变量变量是一种语言中必不可少的组成部分。Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。1. 局部变量 局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。局部变量被引用时要在其名称前加上标志“”,而且必须先用DECLARE命令定义后才可以使用。定义局部变量的语法形式如下: DEC
10、LAER local_variable data_type n其中,参数local_variable用于指定局部变量的名称,变量名必须以符号开头,并且局部变量名必须符合SQL Server的命名规则。参数data_type用于设置局部变量的数据类型及其大小。data_type可以是任何由系统提供的或用户定义的数据类型。但是,局部变量不能是 text,ntext 或 image 数据类型。使用DECLARE命令声明并创建局部变量之后,会将其初始值设为NULL,如果想要设定局部变量的值,必须使用SELECT命令或者SET命令。其语法形式为: SET local_variable = express
11、ion 或者 SELECT local_variable = expression ,.n 其中,参数local_variable是给其赋值并声明的局部变量,参数expression是任何有效的SQL Server表达式。例3-26创建一个myvar 变量,然后将一个字符串值放在变量中,最后输出 myvar 变量的值。 DECLARE myvar char(20) select myvar = This is a test SELECT myvar 例3-27通过查询给变量赋值。 USE adventureworks DECLARE rows int SET rows = (SELECT CO
12、UNT(*) FROM humanresources.employee)2. 全局变量 除了局部变量之外,SQL Server系统本身还提供了一些全局变量。全局变量是SQL Server系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。在使用全局变量时应该注意以下几点: (1)全局变量不是由用户的程序定义的,它们是在服务器级定义的。 (2)用户只能使用预先定义的全局变量。 (3)引用全局变量时,必须以标记符“”开头。 (4)局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果。例3-29显示到当前日期和时间为止试图登录SQL Serv