T-SQL是标準SQL程式设计语言的增强版,它是用来让应用程式与SQL SERVER沟通的主要语言。T-SQL 提供标準 SQL的DDL 和 DML 功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。T-SQL 的功能随著新版的 SQL Server 而持续成长,让我们来看一下 T-SQL 最新增加的特色。
介绍 T-SQL 的新特色
系统预存程序
系统预存程序是 SQL Server 提供来执行管理与其他工作,包括了系统资料表更新以及从系统资料表中检索资料等。系统预存程序是和 SQL Server 一起安装,名称以 sp_ (系统预存程序) 或xp延伸的预存程序)开头。这些预存程序储存在 master 资料库中,权限归系统管理者所有。不过,许多程序可以从使用者自订的资料库执行,用来在特定资料库中从系统资料表检索资讯。当您执行一个系统预存程序,它是在目前资料库的系统资料表中展开作业。
系统预存程序 描述
sp_cycle_errorlog 关闭目前的错误日誌档案,重新命名為errorlog.1(以及,如果需要的话,将旧的errorlog.1重新命名為errorlog.2,依此类推),以及开始一个新的错误日誌档案。
sp_helpfile 传回与目前资料库相关之档案的名称与属性。
sp_helpfilegroup 传回与目前资料库相关之档案群组的名称与属性。
sp_helprole 传回与目前资料库相关中角色的资讯。
sp_help_alert 报告伺服器定义的警示资讯。
sp_start_job 指示SQL Server代理程式开始执行一个工作。
系统资料表
系统资料表用来储存 SQL Server 中所有资料库的设定资讯,以及物件、使用者和使用者存取权限的定义。每个使用者资料库有各自的系统资料表,其中保存资料库的资讯。只有在 master 资料库的系统资料表才握有伺服器层级的设定资讯。您应该利用系统预存程序来存取系统资料表而不是直接存取系统资料表。关於新的 SQL Server 7.0 新增的系统资料表清单可在《线上丛书》裡的「Transact-SQL新增与加强的功能」这个主题裡找到。底下列出一些有趣的新系统资料表:
backupfile这个资料表存放在 msdb 资料库中。它记录了所有记录档备份或资料库档案备份的相关资讯。这些资讯包括档案识别码、档案归属的档案群组,以及档案存在的实体磁碟或资料分割的名称。
restorehistory这个资料表存放在 msdb 资料库中。它包含对应於各还原作业相关资讯的资料列,不论是档案的还原或是资料库的还原。这些资讯包括还原的日期与时间、目的资料库、资料回復的时间点以 及还原的类型。
sysfiles此资料表為一虚拟资料表,亦即无法直接更新或修改。它包含了每个资料库档案的相关资讯,诸如实体装置及逻辑的档案名称、档案大小及最大档 案大小以及资料库增长大小(如果资料库有所增长的话)。
注意
函数
SQL Server 内建的函数提供了一个快速、简单的方法来完成某些特定的工作。SQL Server 7.0 新增了几个有用的函数,并且也包含在 SQL Server 2000 中。了解哪些函数是可用的,SQL Server 应用程式的设计工作可以变得稍為简单。在《线上丛书》中的「Transact-SQL 新增与加强的功能」这个主题可以找到新增函数的完整清单。此处仅介绍一些对您可能很有帮助的函数:
NEWID 建立一个 uniqueidentifier 资料型别的 全域唯一识别项 (GUID)。您需要使用这个函数将值分派给该资料型别的资料行,使用方式為 NEWID() 。(此函数不需引数)
YEAR 传回指定日期年份部分的完整整数。使用方式為 YEAR(date) 。例如:以下陈述式 SELECT YEAR('07/11/01') 将会传回值 2001。
MONTH 传回指定日期月份部分的整数。使用方式為 MONTH(date) 。例如:以下陈述式 SELECT MONTH('07/11/01') 将会传回值7。
DAY 传回指定日期日期部分的整数。使用方式為 DAY(date) 。例如:以下陈述式 SELECT DAY('07/11/01') 将会传回值 11。
FILE_NAME 传回档案识别码(ID)的逻辑档案名称。使用方式為 FILE_NAME (file_id_number)。例如:陈述式 SELECT FILE_NAME(4) 档案识别码為4的档案逻辑名称。如果资料库中找不到有此识别码的档案,则传回 NULL。
资料型别
资料指标变数新增了一个 cursor 资料型别。关於指标的相关讯息,请参考《线上丛书》裡「Cursors」这个主题。
新增了三种新的 Unicode 资料型别-nchar、nvarchar 以及 ntext。每一个 Unicode 字元使用两个位元组,并支援所有国际字元。
新增了一种 uniqueidentifier 资料型别,用於储存通用唯一识别码(GUID)。
字元资料和二进位字串的最大长度扩展到8,000位元组。这一长度适用於 char、varchar、binary 以及 varbinary 等型别。
SQL Server 2000 则新增了下列资料型别:
bigint储存8个位元组长度的整数。
sql_variant允许不同资料型别的值储存於同一个资料行。此型别的资料行储存资料本身的值并且加以描述-它的基本型别、小数位数、精确性、最大大小以及定序(collation)。
table运作方式与暂存资料表类似;其宣告包含资料行清单与资料型别。此资料型别可用来定义一个区域变数或是一个使用者自订函数的传回值。
陈述式
SQL Server 7.0 包括了许多新的 T-SQL 陈述式和已经存在陈述式的新选项。同样的,这些也保留在S QL 2000 之中。这些陈述式对应 SQL Server 7.0 的一些新功能。例如,ALTER DATABASE陈述式包含了下列一些针对档案与档案群组的新选项:MODIFY FILE、ADD FILEGROUP、MODIFY FILEGROUP、REMOVE FILE 以及 REMOVE FILEGROUP。特别是档案群组,新的 DBCC CHECKFILEGROUP 陈述式会检查档案群组中所有资料表的分配和结构的完整性。
SQL Server 7.0 与 SQL Server 2000 包括两个额外的 DBCC 陈述式、DBCC SHRINKFILE 与 DBCC SHRINKDATABASE。前者能缩减资料档案的大小,后者可缩减资料库的所有资料档案并释放未使用的磁碟空间。
SQL Server 7 与 SQL Server 2000 支援一种改进的备份和还原结构。新的BACKUP 陈述式允许全部或部份的资料库备份和记录档备份。新的 RESTORE 陈述式允许使用全部或部份资料库备份和记录档备份来还原。这些代替了 SQL Server 较早版本中的 DUMP 和 LOAD 陈述式。关於 SQL Server 7.0 与 SQL Server 2000 新增陈述式与选项的完整清单,请见《线上丛书》裡「Transact-SQL 新增与加强的功能」这个主题。
RESTORE T-SQL 命令和 BACKUP 命令类似。如同BACKUP 命令,第一次使用时可能相当困难,但是一些 DAB还是喜欢将他们的管理程序放置到 SQL 命令档中,以便於重复执行这些功能。和 BACKUP 命令一样,RESTORE 命令提供了比 Enterprise Manager 更多的附加选项。
RESTORE DATABASE 还原完整的资料库、档案或档案群组。
RESTORE LOG 还原交易记录档。
如您所见,所用的命令要依照执行还原操作的类型而定。因為这些命令共用大部分的选项,所以我们稍候将在一个清单中讨论这两种还原类型(资料库和记录档)的所有选项。
RESTORE 陈述式
RESTORE DATABASE database_name
[ FROM backup_device ]
[ WITH options ]
这个陈述式只要求资料库的档案名称和备份所在的位置。
RESTORE DATABASE database_name
[ FILE = file_name ]
[ FILEGROUP = filegroup_name ]
[ FROM backup_device ]
[ WITH options ]
这个陈述式只要求资料库名称、档案名称或档案群组名称和备份所在的位置。
RESTORE LOG database_name
[ FROM backup_device ]
[ WITH options ]
就 如同其他的命令,database_name 是还原将要执行的资料库名称。backup_device 参数可以是逻辑备份装置名称或实体装置的名称。如果要指定一个实体装置,必须限定它的装置类型-也就是说,装置名称前面必须加上 DISK=、TAPE= 或 PIPE=。可以指定一个或多个装置,中间以逗号隔开。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
选项
表
33-1
RESTORE
命令选项
|
选项
|
说明
|
RESTRICTED_USER
| 设定新还原资料库的安全性,只有 db_owner、dbcreater 和 sysadmin 角色成员才能存取该资料库。 |
FILE = file_number
|
如果在储存媒体中有多个备份集,可用来识别所使用的备份集。例如设定该数值為2,则使用磁带上的第二个备份集。
|
PASSWORD = password
|
指定储存备份的密码。
|
MEDIANAME =media_name
|
指定媒体的名称。
|
MEDIAPASSWORD = password
|
指定储存媒体的密码。
|
MOVE 'logical_file_name'
TO 'OS_file_name'
|
更改还原档案的位置,例如:MOVE 'Northwind' TO 'D:/data/Northwind.mdf'。如果旧的磁碟无法使用,而需要还原到新的磁碟上时,可以使用这个选项。
|
NORECOVERY |RECOVERY |
STANDBY = undo_file
| NORECOVERY 指定在还原后,交易将无法退回或重新进行。如果将还原其他的备份(差异式备份或交易记录档备份),则需要用到这个选项。REVOVERY 為预设选项,它指定执行回復操作,并退回每个没有提交的变更。STANDBY 指定在还原需要还原情况下,建立还原(undo)档案。 |
KEEP_REPLICATION
|
指定当资料库还原时复製设定要保存下来。
|
NOUNLOAD | UNLOAD
|
NOUNLOAD
指定在还原完成后不卸载储存媒体(例如,覆写备份磁带并弹出)。UNLOAD 為预设选项,指定在还原完成后卸载储存媒体。
|
REPLACE
| 指 出即使资料档案已经存在,SQL Server 仍将还原这些档案。现存的档案将被删除和覆写。如果没有指定 REPLACE,那麼 SQL Server 将会核对 database_name 是否已经存在。如果已经存在,那麼将终止还原操作。这个安全特性帮助避免无意地将还原覆写正在工作的资料库。 |
RESTART
|
指定 SQL Server 在还原操作被中断后重新啟动还原操作。
|
STATS [ = percentage ]
|
在还原操作完成了指定的百分率后显示讯息。如果需要监控操作的过程,这个选项将会很有用。
|
PARTIAL
|
指定执行部份还原。
|
STOPAT = date_time
(log restore only)
|
指定资料库回復到 data_time 指定时刻的资料状态(只对记录档还原有效)。
|
STOPATMARK = 'mark'
|
指定还原操作进行到标记处。
|
STOPBEFOREMARK = 'mark'
|
指定还原操作进行到标记之前。
|
--------------------------------------------------------------------------------
RESTORE DATABASE Example
FROM Backup_Dev_1, Backup_Dev_2
WITH
NORECOVERY,
STATS = 5
GO
这个陈述式还原 Example 资料库的交易记录档:
RESTORE LOG Example
FROM Backup_Dev_3, Backup_Dev_4
WITH
NORECOVERY,
STATS = 5,
UNLOAD
GO
和还原的结果一样,输出将显示操作完成的百分率。将通知还原了多少页面、还原花了多少时间,以及还原执行的速度(MB/sec)。
RESTORE LOG Example
WITH RECOVERY
GO
您将再次看到关於还原操作的统计。