消息

中文解释

发生条件

警告

Warning-null value eliminated in set funcation

警告-set函数中的NULL值已经消除

对具有NULL值的表达式使用集合函数(avg/max/min/sum/count)时会出现此信息

Warning-string data,right truncation

警告-字符串数据,右截断

将字符,unichar或二进制数据截断为255字节时会出现此信息.

基数冲突

Subquery returned more than 1value.this is illegal when the subquery follow =,!=,<,<=,>=,or when the subquery is user as an expression_r

子查询返还不止一个值,当子查询跟在=,!=,<之后或者当子查询用作表达式时,这种情况是非法的

标量子查询或行子查询返回不止一行

数据例外

Arithmetic overflow occurred

发生算术溢出

算术运算或SUM函数,以及截断,舍入使精确数值类型丢失精度或标度

Data exception-string data right truncated

数据例外-字符串从右侧被截断

列太短,不能容纳插入或更新的数据,而必须截断非空字符.

Divide by zero occurred

发生零除错误

对数字表达式求值而除数的值为零

Illegal escape character found.There are fewer bytes than necessary to form a valid character

发现非法的转义字符,形成有效字符所需的字节数不过.

在转义序列不是由单个字符构成时,搜索与给定模式相匹配的字符串.

Invalid pattern string.The character following the escape character must be percent sign ,underscore ,left square bracket, right square bracket, or the escape character.

无效的模式字符串.转义字符后的字符必须是百分号,下划线,左方括号,右方括号或转义字符

搜索与特定模式相匹配的字符串时.

完整性约束冲突

Insert,update或delete语句与primary key ,foreign key .check或unique约束或唯一索引发生冲突.

Attempt to insert duplicate key row in object_name with unique index index_name

试图在具有唯一索引index_name的对象object_name中插入重复的键行

在具有唯一约束或索引的表中插入重复的行.

Check constraint violation occurred ,daname=database_name,table name=table_name,constraint name=constraint_name.

发生检查约束冲突

Update或delete与列的检查约束发生冲突.

Dependent foreign key constraint violation in a referential integrity constraint

参照完整性约束中发生相关外键约束冲突.

主键表上的update或delete与外键约束发生冲突.

Foreign key constraint violation occurred,

发生外键约束冲突

在主键表中无匹配值的情况下对外键表执行insert或update

无效的游标状态

Attempt to use cursor cursor_name which is not open.Use the system stored procedure sp_cursorinfo for more information.

试图使用未打开的游标cursor_name.有关详细信息,请使用系统存储过程sp_cursorinfo

试图从未打开或已被commit语句或者隐式(或显式)rollback关闭的游标中进行读取.重新打开游标并重新执行fetch

Cursor cursor_name was closed implicitly because the current cursor position was deleted due to an update or a delete.The cursor scan position could not be recovered.This happens for cursors which reference more than one table.

由于当前游标位置因执行update 或delete而被删除,因此游标cursor_name被隐式关闭.

多表游标的连接已被删除或更改.发出另一个fetch以重新定位游标.

语法错误和访问规则冲突

Command permission denied on object object_name,database database_name,owner owner_name

对象object_name,数据库database_name,所有者owner_name上的command权限被拒绝.

用户试图访问他们没有正确权限的对象.

Implicit conversion from datatype ‘datatype’to ‘datatype’ is not allowed.Use the convert function to run this query.

不允许执行从数据类型‘datatype’到‘datatype’的隐式转换.请使用convert函数来运行该查询.

用户试图将一种数据类型转换为另一种数据类型.

Incorrect syntax near object_name

object_name附件有语法错误

在指定对象附近发现错误的SQL语法.

Insert error:column name or number of supplied values does not match table definition

插入错误:列名或所提供值的数量与表定义不匹配.

插入时使用了无法的列名或插入的值的个数不正确.

Missing end comment mark’*/’

缺少结束注释符’*/’

有/*开始的注释

Object_name not found.Specify owner.objectname or use sp_help to check whether the object exists .

未找到Object_name,指定owner.objectname或使用sp_help检查对象是否存在.

用户试图引用他们不具有权限的对象.

The size given to the object_name exceeds the maximum.The largest size allowed is size.

为object_name指定的大小超出最大值.允许最大值为size

表定义中所有列的大小总和超出行大小允许的最大允许值.

Your server command was deadlocked with another process and has been chosen as deadlock victim

你的服务器命令与另一进程发生死锁并且被选作死锁的牺牲品.

检测到它无法保证两个或两个以上的并发事务可以序列化.

With check option

The attempted insert or update failed because the target view was either created with check option or spans another view created with check iption.

插入或更新尝试失败,原因是目标视图使用With check option创建的或者跨越了另一个用With check option创建的视图

视图或视图所依赖的任何视图是用With check option子句创建的.

 

第四讲 数据库安全性与用户管理

一、安全管理概述

数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。SQL Server的安全管理是一种基于角色(role)的管理方法,位于不同权限层次(或角色)的用户具有不同的用户权限。

规定用户权限有三个因素:用户、数据对象和操作,即什么用户在哪些数据对象上可以执行什么操作。

访问SQL Server中数据的四道屏障:

(1)操作系统——操作系统登录

(2)Sybase服务器——服务器登录

(3)Sybase数据库——数据库用户登录

(4)数据库对象——对象授权

二、理解数据库角色

角色是权限的集合。

1.系统预定义角色

一个真正的数据库管理员应该是整个服务器及其数据库的拥有者,具有管理服务器及其数据库的所有权限。在一个大的系统中,数据库管理员往往不只由一人承担,而是将管理任务进行功能划分,每人提当不同的责任。系统预定义角色就是为适应这种要求而设计的。

●系统管理员(sa_role)

sa_role角色拥有执行与数据库具体应用无关的管理权限:

◇安装与更新SQL Server

◇管理服务器的物理存储

◇配置系统设置参数;

◇创建用户数据库;

◇授予SQL Server用户权限

◇┅┅

●系统安全管理员(sso_role)

sso_role用来实施安全上敏感的操作,执行有关安全性的任务:

◇建立服务器登录帐户;

◇管理口令;

◇授予除sa_role之外的任何角色;

◇管理审计系统;

◇┅┅

●操作员(oper_role)

oper_role执行全服务器范围的数据库操作,如备份与恢复任意数据库等:

◇转储数据库与日志

◇转载数据库与日志

◇┅┅

2.创建与使用自定义角色

(1)创建新的角色:create role

(2)赋予角色权限:grant

(3)设置登录帐户的角色权限:sp_role

格式:sp_role“grant”|”revoke”,角色名,登录帐号名

这里的“grant”|”revoke”是指对角色权限是授予还是撤消。

三、服务器的帐户管理

要想成为Sybase系统的一个用户,首先必须拥有自己的登录帐户。通过这一帐户连同自己的口令向服务器注册后,才能使用Sybase系统中的一些资源,每一个这样的登录帐户在系统中被赋予Server级的标识SUID。

1.添加登录

sp_addlogin 登录名,口令[,缺省的数据库]

如果不指定缺省的数据库,则该帐户的缺省数据库为master库。

2.更改登录属性

◇更改口令;

◇锁定帐户;

◇期限设置;

◇赋予角色。Sybase

四、数据库用户管理

通过某一个帐户注册到服务器后,要想使用某一个数据库,必须成为该数据库的一个用户。通过建立登录与用户之间的联系来管理对数据库的访问。

1.组的概念

组(group)是数据库用户的集合。属于某个组的用户,他自动获得该组所拥有的权限。

Sp_addgroup 组名

◇将一个用户加入某个组:(1)改变用户属性;(2)创建新用户时指定。

◇所有用户自动属于public组,即使这个用户已经属于其他组了。

2.创建新的用户

sp_adduser 登录名,用户名[,组名]

3.别名用户

Sybase的别名机制可以使得多个帐户对应于同一个数据库用户,这样使不同的登录在数据库中拥有同样的权限。这在审计系统中是一种控制责任的一种手段。

Sp_addalias 登录名,数据库中的用户名

别名——相当于给某个用户配一把别人的钥匙(登录)。

五、用户的权限管理

控制用户对数据库对象的访问,有两类权限:命令权限和对象权限。

1.命令权限

Create Database

Create Table

Create View

Create Procedure

Create Rule

Create default

命令权限授权与收权:

Grant 命令权限组合 to 组名|用户名|角色

Revoke 命令权限组合 from 组名|用户名|角色

2.对象权限

Select

Update

Insert

Delete

Reference

Execute

对象权限授权与收权:

Grant 对象权限组合 on 数据库对象 to public|组名|用户名|角色

[With Grant Option]

Revoke 对象权限组合 on 数据库对象 to public|组名|用户名|角色

From public public|组名|用户名|角色

[Cascade]

授权与收权举例:

◇Grant Insert,Delete on Employee

to user_1,Group_1

◇Grant Execute on Pro_culculate

to public

◇Grant Select on Employee(emp_id,emp_name)

to user_3

◇Grant All on Employee

to user_4

◇Revoke update on Employee(emp_id,emp_name)

from user_5

◇Revoke Create Table,Create Rule

from user_6

第五讲 数据库的备份与恢复

数据库的备份与恢复是SQL Server保障数据安全的一种重要手段,为防止意外,数据库管理员必须定期和经常制作数据库的备份。一旦系统出现故障,数据能够得到及时的恢复。

一、基本概念

1.事务处理及其日志

SQL Server使用事务来跟踪所有数据库变化。事务是SQL Server的工作单元。一个事务包含一条或多条作为整体成功或失败的T_SQL语句。每个数据库都有自己的事务日志,即系统表syslogs,事务日志自动记录每个用户发出的每个事务,它饮食了每个事务足够多的信息,以确保数据能够被恢复。

2.检查点(CheckPoint)

服务器在何时更新数据?

——在检查点。在服务器发出一个检查点时:(1)更新数据;(2)在日志中记录下执行检查点的标记。

检查点可把所有“脏页”写到数据库设备上,“脏页”是指从上一次检查点以来,在内存中修改、但没有在磁盘上修改的页。SQL Server的自动检查点机制保证了被完成的事务修改的数据页有规律地从内存中的缓冲区写到数据库设备上。

二、数据库备份

若硬件介质出现故障(如磁盘损坏),当且仅当事先已对数据库及其事务日志作了备份,才能恢复数据库。

注意:绝对不要使用操作系统的拷贝数据库设备,把这样一个拷贝装入SQL Server将导致大量数据库受损。

备份的类型:

完全备份()

增量备份——备份事务处理日志

说明:

(1)只有把事务日志放在单独的设备上,才能进行增量备份;

(2)备份事务日志会截断日志,因此备份的内容是自上次备份以来的事务处理。

(3)备份之前要启动备份服务器,并最好创建转储设备。

命令语法:

dump database 数据库名

to转储设备名/物理文件名

dump transaction 数据库名

{with {truncate_only|no_log}

to转储设备名/物理文件名

[with No_truncate]

Truncate_only与no_log选项用于删除事务处理而不作拷贝。Truncate_only截断日志;在事务处理日志完全满时用no_log,它不为数据库建立检查点。两个选项都会丢掉日志。当使用了这两个参数后,应及时备份整个数据库。

No_truncate拷贝日志但不截断日志,在出现介质错误时使用该选项。

图形界面的选项与命令参数的对应关系:

(1)dump transaction (2)dump transaction…… with no_truncate

(3)dump transaction…… with truncate_only

(4)dump transaction…… with no_log

三、数据库的恢复

使用load database加载备份到现有数据库,数据库可以是用于创建转储的数据库,也可以不是。语法为:

load database 数据库名 from 转储设备名/物理文件名

load transaction数据库名 from 转储设备名/物理文件名

●利用备份恢复数据库举例:

某数据库数据和日志分别存储在两个独立的磁盘上,正常运转时的执行的备份计划如下,每天的17:00执行整个数据库的备份,每天的10:00、12:00、14:00、16:00点执行增量备份:

周一17:00磁带1(100M)周二10:00磁带2(30M)周二12:00磁带3(30M)周二14:00磁带4(30M)周二16:00磁带5(30M)周二17:00磁带6(30M)

DumpdatabaseDumptransactionDumptransactionDumptransactionDumptransactionDumpdatabase

若数据磁盘在周二的下午六点损坏,可以采用如下步骤恢复数据库:

(1)使用dump transaction with no_truncate获得当前的事务日志转储,磁带7;

(2)使用load database转载最新的数据库转储,磁带6;(offline)

(3)使用load transaction提交最新的事务日志转储,磁带7;

(4)使用online database把数据库状态设置为online。

若数据磁盘在周二的下午4:50损坏,恢复过程如下:

(1)使用dump transaction with no_truncate获得当前的事务日志转储,磁带7;

(2)使用load database转载最新的数据库转储,磁带6;(offline)

(3)使用load transaction依次装载磁带2、3、4、5上的事务日志;

(4)使用load transaction提交最新的事务日志转储,磁带7;

(5)使用online database把数据库状态设置为online。

四、制定备份与恢复的策略

由于事务日志在恢复数据库中的特殊作用,应定期备份数据库及其事务日志,而且事务日志的备份要更频繁一些。如:数据库每周备份一次,事务日志每天备份一次。

 

第六讲 数据库与T-SQL语言

一、关系模型的基本概念

关系数据库以关系模型为基础,它有以下三部分组成:

●数据结构——模型所操作的对象、类型的集合

●完整性规则——保证数据有效、正确的约束条件

●数据操作——对模型对象所允许执行的操作方式

关系(Relation)是一个由行和列组成的二维表格,表中的每一行是一条记录(Record),每一列是记录的一个字段(Field)。表中的每一条记录必须是互斥的,字段的值必须具有原子性。

二、SQL语言概述

SQL(结构化查询语言)是关系数据库语言的一种国际标准,它是一种非过程化的语言。通过编写SQL,我们可以实现对关系数据库的全部操作。

●数据定义语言(DDL)——建立和管理数据库对象

●数据操纵语言(DML)——用来查询与更新数据

●数据控制语言(DCL)——控制数据的安全性

T-SQL语言是Sybase对SQL92标准的一种扩展,主要在它的基础上增加了三个方面的功能:自己的数据类型/特有的SQL函数/流程控制功能

T-SQL中的标识符使用说明:

(1)标识符由1-30个字符或数字构成,但首字符必须为字母。临时表的表名以#开头,长度不能超过13个字符。

(2)数据库对象的标识方法举例

database.owner.tablename.columnname

执行远程存储过程:

EXEC server.db.owner.proc_name

当执行语句在批处理的句首时,EXEC可以省略。

三、Sybase的数据类型

在创建表或声明局部变量时,必须使用Sybase系统预定义类型。

1.字符类型

Char(n) VarChar(n)

2.数值类型

整数类型——Integer SmallInt TinyInt

浮点类型——Real Float Number[P,S] Decimal[P,S]

货币类型——Money SmallMoney

3.日期/时间类型

Datetime SmallDatetime

两者时间部分的精度不同,前者精确到分,后者精确到1/30秒。

4.文本和图像类型

Text Image

5.二进制数据类型

Binary(n) VarBinary(n)

四、数据定义语言

用来定义数据库对象。数据库对象是Sybase用来存储数据的逻辑实体,主要有:

表(Table)、视图(View)、临时表(Temp Table);

主键(Primary Key)、外键(Foreign Key)、索引(Index)、规则(Rule)、默认值(Default);

存储过程(Stored Procedure)、触发器(Trigger)

●基本语法

下面给出创建主要数据库对象的语法:

1.表

创建表的基本语法是:

Create table[database.[owner].]table_name

(column_name datatype [default {constant_expression_r|user|null}]

{[{identity|null|not null}]|[[constraint constraint_name]

{{unique|primary key}[clustered|nonclustered]

[with{fillfactor|max_rows_per_page}=x]

[on segment_name]

|references[[database.]owner.]ref_table

[(ref_column)]

|check(search_condition)}]}…

在建立大型的数据库时,可以考虑将创建表乃至其它数据库对象的过程写到一个文本里,当数据库系统出现问题时,在最坏的情况下,重建过程可以得到简化,也能比较好的对数据库的建设过程进行监视。

创建表的过程完成下列活动:

·定义表的每一列;

·定义列名和列的数据类型并指定列是否处理空值;

·指定列是否具有IDENTITY属性;

·定义列级的完整性约束和表级的完整性约束

上述过程可见,创建表的过程可以设定填充因子,将列置于段上,设计索引,外键等等。

2.索引

索引对查询性能的影响很大,要引起重视。

索引加速了数据检索,Adaptive Server有三类索引:

·复合索引——索引包含多列;当两列或多列由于它们的逻辑关系而作为整体被查询时可建立这种索引;

·唯一索引——索引列的值不允许重复;

·簇聚索引和非簇聚索引——簇聚索引强迫Server不断地对表中数据排序或重排序以保证表中数据的物理顺序和逻辑顺序的一致性,簇聚索引对范围查询性能影响极大;非簇索引没有这样的要求,非簇聚索引对修改操作有利。

何时建索引?

·如果手动插入identity列,则创建唯一索引以保证不插入已经存在的值;

·经常被排序访问的列,即被列在order by子句中的列,最好对其建立索引以便Adaptive Server能充分利用索引顺序的优点;

·如果列经常用手连接,则可对列建立索引,这样系统能更快地执行连接;

·包含主键的列一般都有簇聚索引,尤其是当它频繁地和其它表的列相关联;

·经常被范围查询的列最好为其建立簇聚索引,一旦查询范围内的第一个值被发现,则随后的值在物理上一定相近。簇聚索引对单值查询并没有什么优点。

创建索引的基本语法:

Create [unique][clustered|nonclustered]index index_name

On [[database.]owner.]table_name

(column_name[,column_name]…)

[on segment_name][with consumers=x]

上述语法包含了这样的暗示:将簇聚索引和它的基表分离在不同的段上;段是逻辑概念,但段可以位于不同的物理设备上,也即将簇聚索引和基表物理上分开。这是不允许的,我们将在后面讨论设备、数据库、段、表分区时作详细讨论。

3.键(key)

理解键是理解关联的关键。

键和索引往往是一回事。键的意义在概念上,键用于参照完整性约束。

主键是表的单值列的集合,主键通过在放置它们的表上创建一个单值索引来实现其单值性的。实际上主键是作为标志表的标志符而存在的,一旦主键确定,则由该主键就确定了的表也就确定了。

外键是和其它表中的主键相关的列,主键和外键的关系确定了外键的值域,该值域即为相应主键的取值范围。这样就从理论上强制实现了表与表之间的参照完整性。

前面创建表的语法里包含了创建键的成分。也可以通过其它途径创建主键和外键。

◇Unique约束和Primary key约束的区别

Unique约束和Primary key约束用来保证同一表中指定的列上没有重复值,这两个约束都产生唯一索引确保数据一致性,默认情况下,Unique约束产生唯一的非聚集索引,Primary key约束产生唯一的聚集索引。Primary key约束比Unique约束严格:Primary key列不允许有空值,Unique列允许有空值。

4.视图

视图是查看多表中数据的方法,视图从基表派生,它并非物理存在,而是逻辑表;视图也系统提供管理表的一种安全机制。视图使得用户集中精力在感兴趣的数据集上。

创建视图的语法:

create view [[database.]owner.]view_name

[(column_name[,column_name]…)]

as select [distinct] select_statement

[with check option]

有distinct关键字的视图不能更新。当视图涉及关联时,定义视图要小心,这时是对多表操作,完整性显得很重要。

五、数据操纵语言

1.Select语句

基本语法:

SELECT[all|distinct]字段列表

[into表名]

[from表名]

[where条件表达式]

[group by [all]字段列表]

[having筛选表达式]

[order by 字段列表[asc|desc]]

[compute聚集函数列表[by字段列表]]

注意:Select语句中的子句必须按照上述顺序使用。也就是说,若该语句包括一个group by子句和一个order by子句where,group by子句必须放在order by子句之前。

Having子句类似于where子句,不同之处有两点:(1)Having子句必须结合group by子句使用;(2)where子句不能用聚集函数,而Having子句可以。

下面通过实例来对Select的通常用法加以介绍。

例1:选择所有的列,语法为select * from table_list

如:select * from publishers

例2:选择指定的列,语法为

select column_name[,column_name]…

from table_name

如:select pub_id,pub_name from publishers

例3:重命名查询结果中的列,语法为

select column_heading= column_name

from table_name

如:select Publisher=pub_name,pub_id

from publishers

例4:select列表中的计算值,可以对select列表中的数值数据进行计算,下面列出了算术运算符。

符号运算

+加

-减

/除

*乘

%取模

如select title_id,total_sales,total_sales*2 from titles

例5:使用distinct消除重复的查询结果

可选的关键词消除select语句的结果中的重复行。若不指定distinct,缺省值为all,将检索出包含重复行的所有行数据。

如:select distinct au_id from titleauthor

例6:选择行——where语句

select语句中的确切指定要检索哪些行的准则,其一般格式为:

select select_list from table_list where search_conditions

where子句中的搜索条件(或称限制)包括:

·比较运算符(=,<,>,!=等=

如:where advance*2>total_sales*price

·范围(between和not between)

如:where total_sales between 5000 and 10000

·列表(in和not in)

如:where state in(“CA”,”IN”,”MD”)

·匹配字符(like和not like)

如:where phone like “0535%”

·未知值(is null和is not null)

如:where advance is null

·以上各项的组合(and, or)

如:where advance<5000 or total_sales between 500 and 1000

例7:用集合函数小结查询结果

集合函数用特定列的数据来计算小结值。

集合函数结 果

Sum([all|distinct]expression_r)数值列中(不重复)值的总和

Avg([all|distinct]expression_r)数值列中(不重复)值的平均

count([all|distinct]expression_r)列中(不重复)非空值的数目

Count(*)选定的行数

Max(expression_r)expression_r的最大值

Min(expression_r)expression_r的最小值

如:select avg(advance),sum(total_sales)

from titles

where type=”as”

select count(*) from titles

select avg(distinct price) from titles

select max(price) from books

例8:分组组织查询结果——group by 子句

group by 子句用在select语句中将一张表分成若干组。

如:select type, advance from titles group by type

例9:选择分组数据——having子句

having为group by子句设置条件,与where为select语句设置条件一样。Having搜索条件与where相同,但having可包括集合函数,而where不能包括。

下列语句使用带集合函数having子句的例子。它把title表中的行按类型分组,但去掉了那只包含一本书的分组。

Select type from titles group by type having count(*)>1

下面是一个不带集合函数的having子句的例子。它把title表中的行按类型分组,但去掉了那些不以字母“p”开头的类型。

Select type from titles group by type having type like “p%”

例10:查询结果排序——order by子句

Order by子句允许按一列或多列对查询结果排序。每个排序可以是升序的(asc)或降序的(desc)。若不特别指明,则按升序进行。下列查询返回按pub_id排序的结果:

Select pub_id,type,title_id from titles order by pub_id

例11:连接——从多张表中检索数据

连接两张或两张以上的表是这样一个过程:比较指定字段中的数据,根据比较结果用符合条件的行组成一张新表。

举例:

select publishers.pub_id,publishers.pub_name,authors.*

from publishers,authors

where publishers.city=authors.city

例12:分组计算子句

Compute是Sybase对SQL标准中Group子句的扩充,可以将其看作带聚集计算的Group子句。例如:

Select type,price,advance

From titles

Order by type

Compute sum(price),sum(advance) by type

2.Insert语句

用Insert命令向数据库中添加行有两种方法:使用关键词values或使用select语句。

Insert语句的基本语法为:

Insert[into]表名[(字段列表)]

{values(值列表)|select_statement}

举例:insert into publishers

values(‘1622’,’Jardin,Inc.’,’Camden’,’NJ’)

Insert into publishers(pub_id,pub_name)

values(‘1756’,’The Health Center’)

Insert authors select * from newauthors

Insert authors(au_id,address,au_lname,au_fname)

Select * from newauthors

3.Delect语句

Delect可以对一行或多行进行操作。

Delect语句的基本语法为:

Delect 表名

[from 表名列表]

[where条件表达式]

举例:Delect publishers

where pub_name=”Jardin,Inc.”

Delect titles

From authors, titles

Where titles.title_id=authors.title_id

4.Update语句

可以使用Update命令来改动表中的单个行、一组行或所有行。

Update语句的基本语法为:

Update表名

Set column_name1={expression_r1|null|(select_statement)}

[,column_name2={expression_r2|null|(select_statement)}]

[……]

[from表名列表]

[where条件表达式]

举例:

update authors set_au_lname=”Health”,aufname=”Goodbody”

where au_lname=”Bloth”

update titles

set total_sales=total_sales + qty

from titles,sales

where titles.title_id=sales.title_id

六、Sybase预定义函数

1.聚集函数

sum([all|distinct]表达式)

avg([all|distinct]表达式)

count([all|distinct]表达式)

count(*)

max(表达式)

min(表达式)

2.字符串函数

upper(字符表达式)

lower(字符表达式)

char(整型表达式)

char_length(字符表达式)

ltrim(字符表达式)

rtrim(字符表达式)

……

3.数学函数

abs(精确小数型表达式)

floor(精确小数型表达式)求小于或等于给定表达式值的最大整数(取底)

rand([整数型]

round(精确小数型表达式,整数)

sign(精确小数型表达式)

power(精确小数型表达式,整数幂)

……

4.日期函数

getdate()

datepart(日期部分,日期)

datediff(日期部分,日期1,日期2)

dateadd(日期部分,数值表达式,日期)

5.类型转换函数

convert(数据类型,表达式[,格式])

6.系统函数

db_name([数据库ID])

host_name()

isnull(表达式1,表达式2)

……

七、数据控制语言

用来控制数据的安全性,如权限控制语句GRANT和REVOKE等。