第 6 章 Transact-SQL 增 强 工 具

本 章 将 介 绍 Transact-SQL 增 强 工 具 的 内 容 , Transact-SQL 增 强 工 具 是

M icrosoft SQL Server 7 版 本 的 组 成 部 分 。

6.1 增 强 的 存 储 过 程

存 储 过 程 是 Transact-SQL 语 句 编 译 而 成 的 对 象 , 可 以 用 EXECUTE storedprocedurename 语 句 运 行 它 。 存 储 过 程 可 以 返 回 一 个 或 多 个 结 果 集 , 整 型返 回 代 码 、 OUTPUT 自 变 量 或 参 数 。

存 储 程 序 有 许 多 优 点 : 高 速 度 、 可 重 用 性 、 商 业 逻 辑 封 装 、 保 护 尚 未 优 化的 查 询 、 减 少 网 络 拥 挤 、 以 及 安 全 性 ( 因 为 只 需 对 存 储 过 程 授 予 许 可 , 而 对 它 访问 的 对 象 不 需 授 予 许 可 ) 。 存 储 程 序 是 Transact-SQL 开 发 人 员 与 数 据 库 交 互 操作 、 提 高 数 据 库 性 能 和 可 靠 性 的 基 础 。

M icrosoft SQL Server 能 提 供 永 久 或 临 时 存 储 过 程 。 临 时 存 储 过 程 存 储 在

tempdb 系 统 数 据 库 中 。

存 储 过 程 中 的 延 迟 名 解 析 性 能 (Delayed Name Resolution Behavior)

由 于 允 许 SQL Server 开 发 人 员 创 建 在 Transact-SQL 代 码 中 并 不 存 在 的 存 储过 程 、 批 处 理 文 件 或 触 发 程 序 及 引 用 对 象 , 延 迟 名 解 析 可 节 省 Transact-SQL 编程 人 员 的 大 量 时 间 和 精 力 。 在 以 前 的 版 本 中 , Transact-SQL 编 程 人 员 必 须 按 特定 的 顺 序 创 建 对 象 。 例 如 , 在 6.x 版 本 中 , 当 创 建 存 储 过 程 时 , 存 储 过 程 在 创建 脚 本 的 Transact-SQL 代 码 中 所 引 用 的 对 象 必 须 在 分 析 该 存 储 过 程 ( 即 句 法 分 析 ) 和 创 建 存 储 过 程 对 象 时 存 在 于 数 据 库 上 。 如 果 在 数 据 库 上 找 不 到 存 储 过 程 所 引用 的 对 象 , 就 无 法 创 建 存 储 过 程 对 象 。 在 以 前 的 版 本 中 , SQL Server 会 返 回“ 引用 对 象 不 存 在 ” 的 错 误 声 明 , 为 了 创 建 引 用 某 个 对 象 的 存 储 过 程 ( 也 可 以 是 触 发程 序 ), 就 必 须 创 建 该 对 象 。 这 是 非 常 费 时 的 , 也 不 符 合 逻 辑 的 循 环 。

在 M icrosoft SQL Server 7 中 , 创 建 存 储 过 程 时 若 引 用 对 象 不 存 在 , 当 分 析该 存 储 过 程 ( 分 析 语 句 的 合 法 性 ) 时 , 即 使 在 数 据 库 上 找 不 到 存 储 过 程 或 触 发 程序 中 引 用 的 对 象 , SQL Server 也 允 许 创 建 存 储 过 程 , 并 将 它 放 到 数 据 库 上 。 在以 后 的 解 析 运 行 阶 段 会 解 析 名 称 , 解 析 阶 段 是 另 一 个 合 法 性 分 析 阶 段 , 它 发 生在 运 行 期 间 , 而 不 是 对 象 创 建 期 间 。 如 果 存 储 过 程 在 运 行 期 间 引 用 了 对 象 ( 这可 能 是 几 天 之 后 的 事 情 ), 而 被 引 用 的 对 象 仍 未 创 建 , SQL Server 将 发 出 一 个 运行 错 误 的 信 息 , 因 为 存 储 过 程 通 不 过 解 析 阶 段 。

这 样 会 使 Transact-SQL 的 开 发 更 加 容 易 , 因 为 在 创 建 存 储 过 程 时 可 能 有 许多 对 象 不 存 在 , 但 是 它 们 将 在 执 行 存 储 过 程 的 运 行 期 间 创 建 。 在 解 析 阶 段 的 运

行 期 间 , 可 以 阐 明 查 询 计 划 (Query plan)。

M icrosoft SQL Server 用 表 中 的 数 据 量 、 表 中 出 现 的 索 引 等 信 息 来 建 立 查 询表 。 现 有 引 用 对 象 的 数 据 必 须 在 解 析 阶 段 存 在 , 但 是 因 为 在 这 一 阶 段 并 不 实 际执 行 存 储 过 程 对 象 , 所 以 引 用 对 象 名 不 必 存 在 于 对 象 创 建 语 法 验 证 阶 段 。

SQL Server Optimizer 必 须 有 关 于 现 有 (existing)对 象 的 信 息 , 才 能 阐 明 该 查询 计 划 , 并 把 该 计 划 放 入 procedure cache( 程 序 高 速 缓 存 ) 的 内 存 中 ( 参 见 图 6.1)。然 后 M icrosoft SQL Server 使 用 该 查 询 计 划 执 行 存 储 过 程 对 象 。

第 6 章 Transact-SQL 增 强 工 具 - 图1

图 6.1 存储过程和触发器的新延迟名称解析

Alter Procedure 语 句

M icrosoft SQL Server 7 的 另 一 个 受 欢 迎 的 变 化 是 : 它 能 改 变 存 储 过 程 对 象 , 而 不 必 从 数 据 库 和 syscomments 系 统 表 中 删 去 它 来 改 变 存 储 过 程 对 象 。 改 变 存储 过 程 的 能 力 是 非 常 重 要 的 , 因 为 存 储 过 程 和 触 发 程 序 都 带 有 其 他 引 用 和 许 可 , 在 删 除 对 象 时 会 销 毁 它 们 。 只 改 变 对 象 而 不 是 删 除 它 将 保 留 与 该 对 象 相 关 的 引用 和 许 可 。 下 表 展 示 了 谁 能 使 用 Alter Procedure 语 句 :

ALTER PROCEDURE 的 用 法

Stored Procedure Owner

Data Definition Language Administrators DBO

A LTER PROCEDURE 语 句 的 语 法 如 下 :

A LTER PROC [ EDURE ] procedure name [ ;number]

[ ({ @ argument_name } data_type [ = default ] [ OUTPUT ] )]

[ ,...]

W ITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION }]

[ FOR REPLICATION ] A S

Transact-SQL statements [ ...]

表 6.1 给 出 并 解 释 了 A LTER PROCEDURE 的 每 个 参 数 。

表 6.1ALTER PROCEDURE 的参数

Alter Procedure 的参数

描述

Procedure Name

该参数是用户希望改变的程序名

Number

该参数用来组合同名的存储过程。它是一个可选参数

Argument Name

此 参 数 是 用 来 把 值 传 递 给 存 储 过 程 的 自 变 量 。 在 该 自 变量 名 前 使 用 @ 符号。这表明用户在执行时必须把值传递给存储

过程。用户自定义的存储程序可以有 0 至 1024 个自变量

Data Type

指 定 该 参 数 的 数 据 类 型 。 唯 一 不 能 传 递 的 数 据 类 型 是

image 数据类型

Default

可以为该自变量提供一个缺省值

OUTPUT

指定自变量可用于执行存储过程后的返回值

RECOMPILE

查 询 计 划 不 能 保 存 在 内 存 中 , 以 便 下 一 次 执 行 该 存 储 过程 时 使 用 , 用 户 每 次 要 求 执 行 存 储 过 程 时 都 会 生 成 新 的 查 询计 划 。 必 须 使 用 RECOMPILE 参 数 , 如 果 没 有 给 定 重 新 编 译

参数,则创建存储过程时不会采用重新编译设定的缺省值

ENCRYPTION

存储过程用加密格式存储于数据库的 syscomments 系统表中 。 如 果 要 使 用 加 密 , 必 须 在 alter 中使用该参数。必须明确给定 ENCRYPTION 参数,如果没有给定加密参数,则不会采

用创建存储过程时加密设定的缺省值

FOR

REPLICATION

在 创 建 或 改 变 作 为 过 滤 器 的 存 储 过 程 时 , 可 使 用 FOR REPLICATION , 且 只 有 通 过 复 制 才 能 使 用 。 该 参 数 不 能 与

W ITH RECOMPILE 选项一起使用

续 表

A S

单词 A S 指明一个或多个 Transact-SQL 语句,它们组成随

后的存储过程。

SQL Statements

这些语句是存储过程的实际 Transact-SQL 代码

新 的 系 统 存 储 过 程

M icrosoft SQL Server 7 创 建 了 许 多 新 的 系 统 存 储 过 程 。 这 些 新 系 统 存 储 过程 分 为 如 下 类 别 :

  • Distributed Query Related

  • Cursor Related

  • Security Related

  • Web Related

  • Job Related

  • Other

系 统 存 储 过 程 的 详 细 内 容 将 在 第 23 章 中 介 绍 。

新 分 布 式 查 询 相 关 系 统 存 储 过 程

新 分 布 式 查 询 相 关 系 统 存 储 过 程 可 用 于 分 布 式 查 询 , 并 包 含 新 的 OLE DB

连 接 工 具 。 许 多 工 具 都 已 转 换 为 使 用 OLE DB 的 功 能 。 表 6.2 描 述 了 新 的 分 布

式 查 询 相 关 系 统 存 储 过 程 。

表 6.2 新分布式查询相关系统存储过程

新分布式查询相关系统存储过程

新功能的描述

sp_addlinkedserver

创建链接服务器

sp_droplinkedserver

删去用于分布式查询的链接服务器

sp_addlinkedsrvlogin

创 建 或 更 新 映 射 到 链 接 服 务 器 的 SQL

Server 注册

sp_droplinkedsrvlogin

创 建 或 更 新 映 射 到 链 接 服 务 器 的 SQL

Server 注册

sp_linkedservers

显示本地服务器的链接服务器列表

sp_catalogs

显示命名链接服务器的类别列表

sp_columns_ex

显示目的远程表的列信息

sp_foreignkeys

显示目的远程表的外来键

sp_primarykeys

显示目的远程表的主键列

sp_indexes

显示目的远程表的索引信息

sp_tables_ex

显示匹配远程表的表信息

sp_serveroption

显示分布式查询的选项

新 的 游 标 相 关 系 统 存 储 过 程

表 6.3 描 述 了 新 的 游 标 相 关 存 储 过 程 的 功 能 。 当 需 要 以 每 次 一 行 的 方 式 处 理结 果 集 时 , 可 使 用 游 标 。

表 6.3 新的游标相关系统存储过程

新的游标相关系统存储过程

新功能的描述

sp_cursor_list

sp_cursor_list 存储过程显示用于连接的当前打开

的服务器游标的信息,如游标的类型。

sp_describe_cursor

sp_describe_cursor 存储过程显示服务器游标的属

sp_describe_cursor_columns

sp_describe_cursor_columns 存储过程显示服务器

游 标 结 果 集 中 列 的 属 性 , 例 如 每 个 游 标 列 的 名 称 和数据类型

sp_describe_cursor_tables

sp_describe_cursor_tables 存储过程显示服务器游标的结果集中表的属性

新 的 安 全 性 相 关 系 统 存 储 过 程

表 6.4 描 述 了 新 存 储 过 程 的 功 能 。 这 些 程 序 可 用 于 M icrosoft SQL Server 7

中 新 的 安 全 特 性 , 如 角 色 。

表 6.4 新的安全性相关存储过程

新的安全性相关存储过程

新功能的描述

sp_dbfixedrolepermission

sp_dbfixedrolepermission 存 储 过 程 显 示 每 个 固 定数据库角色的许可

sp_helpdbfixedrole

sp_helpdbfixedrole 存 储 过 程 删 去 用 于 分 布 式 查 询的连接服务器

增 强 的 W eb 相 关 系 统 存 储 过 程

表 6.5 表 示 的 是 M icrosoft SQL Server 中 的 新 增 强 型 Web 相 关 的 存 储 过 程 。

表 6.5 新的 Web 相关的存储过程

新的 Web 相关的存储过程

新的功能性描述

sp_savehtmltable

sp_savehtmltable 存 储 过 程 把 H T M L 表 输 入 到 特 定 的

M icrosoft SQL Server 表中

sp_makewebtast

sp_ makewebtast 存储过程通过创建任务生成一个 H T M L

文档,该文档包含由已执行的查询返回的数据

新 的 作 业 相 关 系 统 存 储 过 程

SQL Server Agent 使 用 新 的 作 业 相 关 存 储 过 程 , 该 程 序 带 有 大 大 扩 充 的 作 业处 理 调 度 工 具 。 使 用 SQL Server Agent 可 避 免 与 这 些 存 储 过 程 合 并 在 一 起 的 复杂 性 , 这 在 本 书 第 4 章 通 过 SQL Server Agent 来 介 绍 。 表 6.6 描 述 了 新 的 作 业相 关 系 统 存 储 过 程 的 功 能 。

表 6.6 新的作业相关系统存储过程

新的作业相关存储过程 新功能的描述
sp_add_alert 增加一个警告
sp_add_category 增加作业、警告或操作员的类别
sp_add_job 增加一个作业
sp_add_jobschedule 增加一个作业调度

续 表

sp_add_jobserver 增加可用于作业的服务器列表
sp_add_jobstep 增加一个作业步骤
sp_add_notification 增加一个操作员通知
sp_add_operator 增加一个操作员
sp_add_targetservergroup 增加用于多重服务器作业的目标服务器组
sp_add_targetsvrgrp_member 增加一个目标服务器组成员
sp_apply_job_to_targets 把作业应用到目标服务器
sp_delete_category 删除一个类别
sp_delete_job 删除一个作业
sp_delete_jobschedule 删除一个作业调度
sp_delete_jobserver 删除一个可用于作业的服务器
sp_delete_jobstep 删除一个作业步骤
sp_delete_notification 删除一个通知
sp_delete_operator 删除一个操作员
sp_delete_targetserver 删除一个目标服务器
sp_delete_targetservergroup 删除一个目标服务器组
sp_delete_targetsvrgrp_member 删除一个目标服务器组成员
sp_downloaded_row_limiter

用特定服务器的下载状态 1 来 限 制 sysdownloadlist

系统表中的行

sp_help_category 显示类别信息
sp_help_downloadlist 列 出 命 名 作 业 的 sysdownloadlist 系 统 表 中 的 所 有行。如果没有指定作为参数的作业,则列出所有行
sp_update_notification 更新通知

续 表

sp_update_targetservergroup 改 变 targetservergroup 的名称
sp_help_job 显示作业的信息
sp_help_jobhistory 显示作业的历史信息
sp_help_jobschedule 显示作业调度信息
sp_help_jobserver 显示作业服务器信息
sp_help_jobstep 显示作业步骤信息
sp_help_operator 显示操作员信息
sp_help_targetserver 显示目标服务器信息
sp_help_targetservergroup 显示目标服务器组信息
sp_manage_jobs_by_login 管理指定注册的作业
sp_msx_defect 从多重服务器操作中删除服务器
sp_msx_enlist 把服务器增加到多重服务器操作中
sp_post_msx_operation

把行插入 sysdownloadlist 系统表,通知目标服务器

下载已公布的作业操作

sp_purge_jobhistory 删除作业的历史行
sp_remove_job_from_targets 从目标服务器或目标服务器组中删除已命名的作业
sp_resync_targetserver 在多重服务器环境下使已命名的服务器同步运行
sp_start_job 运行一个作业
sp_stop_job 中止一个作业
sp_update_category 更新类别名
sp_update_job 更新作业的属性
sp_update_jobschedule 更新作业的设置
sp_update_jobstep 更新作业步骤的设置

续 表

sp_update_targetservergroup 更新目标服务器组名称
sp_help_notification 显示通知的信息
sp_update_operator 更新操作员信息
其 他 新 系 统 存 储 过 程

表 6.7 描 述 了 Microsoft SQL Server 中 的 其 他 几 个 新 存 储 过 程 。

表 6.7 其他新存储过程

新存储过程

新功能的描述

sp_validname

sp_validname 存储过程决定 SQL -Server 标识名是否有效

sp_dbcmptlevel

sp_dbcmptlevel 存储过程是购买期间与新版本 7 特性的桥梁,直到可以修改应用程序以充分利用版本 7 的新功能为止

新 系 统 扩 展 存 储 过 程

新 系 统 扩 展 存 储 过 程 很 少 在 M icrosoft SQL Server 的 日 常 工 作 中 使 用 , 除 非它 通 过 一 个 M icrosoft SQL Server GUI 工 具 来 使 用 。 下 述 列 表 中 的 扩 展 存 储 过 程可 由 以 前 称 为 SQL Trace 的 SQL Profiler GUI 工 具 来 使 用 :

xp_trace_addnewqueue xp_trace_pausequeue

xp_trace_deletequeuedefinition xp_trace_restartqueue xp_trace_destroyqueue xp_trace_savequeuedefinition xp_trace_enumqueuedefname xp_trace_setappfilter xp_trace_enumqueuehandles p_trace_setconnectionidfilter

xp_trace_eventclassrequired xp_trace_setcpufilter

xp_trace_getappfilter xp_trace_setdbidfilter xp_trace_getconnectionidfilter xp_trace_setdurationfilter xp_trace_getcpufilter xp_trace_seteventclassrequired

xp_trace_getdbidfilter xp_trace_seteventfilter

xp_trace_getdurationfilter xp_trace_sethostfilter

xp_trace_geteventfilter xp_trace_sethpidfilter

xp_trace_geteventnames xp_trace_setindidfilter

xp_trace_getevents xp_trace_setntdmfilter

xp_trace_gethostfilter xp_trace_setntnmfilter

xp_trace_gethpidfilter xp_trace_setobjidfilter

xp_trace_getindidfilter xp_trace_setowneridfilter

xp_trace_getntdmfilter xp_trace_setpercentfilter

xp_trace_getntnmfilter xp_trace_setqueueautostart

xp_trace_getobjidfilter xp_trace_setreadfilter

xp_trace_getowneridfilter xp_trace_setserverfilter

xp_trace_getpercentfilter xp_trace_setseverityfilter

xp_trace_getqueueautostart xp_trace_setspidfilter

xp_trace_getreadfilter xp_trace_setuserfilter

xp_trace_getseverfilter xp_trace_setwritefilter xp_trace_getseverityfilter xp_trace_setqueuedestination

xp_trace_getspidfilter xp_trace_getqueuedestination

xp_trace_getspidfilter xp_trace_setqueuedestination

xp_trace_getuserfilter xp_trace_startconsumer xp_trace_getwritefilter

xp_trace_loadqueuedefinition

这 些 扩 展 存 储 过 程 可 由 SQL Server Profiler 使 用 , 下 一 章 介 绍 新 数 据 库 工 具时 将 论 述 SQL Server Profiler。

触 发 程 序

在 M icrosoft SQL Server 中 , 对 触 发 程 序 的 功 能 和 特 性 进 行 了 改 进 。 触 发 程序 已 经 增 加 了 下 列 特 性 :

  • 改 变 触 发 程 序

  • 可 递 归 调 用 本 身 的 触 发 程 序

  • 多 个 触 发 程 序 对 应 一 个 触 发 行 为

    1. 改 变 触 发 程 序 语 句

现 在 用 户 能 改 变 触 发 程 序 对 象 , 而 不 必 从 数 据 库 和 syscommands 系 统 表 中删 除 该 对 象 。 这 是 非 常 重 要 的 , 因 为 触 发 程 序 携 带 了 在 删 除 对 象 时 被 销 毁 的 其他 引 用 和 许 可 。 改 变 该 对 象 而 不 是 删 除 它 , 可 以 保 留 与 该 对 象 相 关 的 引 用 和 许可 。 如 果 使 用 W ITH APPEND 选 项 , 则 对 每 个 Update 、 Insert 和 Delete 而 言 , 可 存 在 多 个 触 发 程 序 , 这 意 味 着 对 每 个 Update 、 Insert 和 Delete 而 言 , 可 激 活多 个 触 发 程 序 。 W ITH APPEND 的 功 能 存 在 于 由 sp_dbcmptlevel 设 置 的 7 级 兼容 性 。 下 表 描 述 了 谁 可 使 用 A lter Trigger 语 句 :

A lter Trigger 的 用 法

Table Owner

Data Definition Language Administrators DBO

其 语 法 如 下 :

A LTER TRIGGER trigger_name ON table

[ W ITH ENCRYPTION ]

{FOR { [ ,] [ INSERT ][ ,] [ UPDATE ] [ ,] [ DELETE ] }

[ NOT FOR REPLICATION ] A S

sql_statement [ ...n ]

}

|

{FOR { [ ,] [ INSERT ] [ ,] [ UPDATE ] }

[ NOT FOR REPLICATION ] A S

IF UPDATE (column)

[ {AND | OR} UPDATE (column) [ ,...n ]] sql_statement [ ...n ]

}

表 6.8 描 述 了 A lter Trigger 的 自 变 量 。

这 是 如 何 用 Alter Trigger 语 句 改 变 插 入 触 发 程 序 的 实 例 :

A LTER TRIGGER mytrigger ON tablename

FOR INSERT

AS RAISERROR ( ′ mytrigger error′ , 1, 2)

表 6.8Alter Trigger Statement 的自变量

Alter Trigger 参数

描述

TriggerName

要改变的触发程序名

TableName

触发程序将执行的表名

WITH ENCRYPTION

键词

syscomments

系 统 表 中 加 密 编 码 关

续 表

{ [ , ][ INSERT ][ , ][ UPDATE ][ ,]

[ DELETE ][ , ][ INSERT ]} | {[ , ]

[ UPDATE ] }

表示哪个语句将激活该触发程序

NOT FOR REPLICATION

如果与复制相关的 sqlrepl 注册 ID 修

改了表格,则不能激活该触发程序

AS

下一个是 Transact-SQL 语句

Transact-SQL

语句是触发程序的 Transact-SQL 语句

IF UPDATE(ColumnName)

根 据 对 指 定 的 列 是 INSERT 还 是

UPDATE ,来提供 IF 逻辑

ColumnName

检查 INSERT 或 UPDATE 操作的列名

在 触 发 程 序 内 部 不 允 许 使 用 的 语 句

在 触 发 程 序 中 可 使 用 的 Transact-SQL 语 句 是 有 限 的 。 在 触 发 程 序 中 不 能 使用 下 列 Transact-SQL 语 句 :

A LTER DATABASE LOAD LOG

A LTER TABLE RESTORE LOG

A LTER TRIGGER REVOKE

CREATE DATABASE SELECT INTO ( 因 为 它 可 创 建 表 格 )

CREATE DEFAULT TRUNCATE TABLE

CREATE PROCEDURE A LTER PROCEDURE

CREATE RULE ALTER VIEW

CREATE TABLE CREATE INDEX CREATE TRIGGER CREATE TABLE

DENY CREATE VIEW

DISK INIT D ISK RESIZE

DROP DATABASE DROP INDEX

DROP DEFAULT DROP TABLE

DROP PROCEDURE G R A N T

DROP RULE RESTORE DATABASE

DROP TRIGGER RECONFIGURE

DROP VIEW UPDATE STATISTICS LOAD DATABASE

使 触 发 程 序 能 递 归 调 用 它 本 身

如 果 设 置 了 sp_dboption 递 归 触 发 程 序 选 项 , 并 且 更 新 了 触 发 程 序 内 部 的 表格 , 该 触 发 程 序 就 可 以 递 归 调 用 自 身 。

下 面 是 一 个 实 例 :

sp_dboption mydb ,′ recursive triggers ′ , true

在 这 个 实 例 中 , 如 果 更 新 了 触 发 程 序 内 部 的 表 , 就 把 recursive trigger 数 据库 选 项 设 置 为 真 , 而 且 允 许 该 触 发 程 序 递 归 调 用 其 自 身 。

多 个 触 发 程 序 对 应 一 个 触 发 动 作

如 果 指 明 了 W ITH APPEND 或 把 sp_dbcmptlevel 的 兼 容 性 等 级 设 置 为 70 , 就 有 多 个 触 发 程 序 对 应 于 数 据 库 修 改 操 作 Update 、 Insert 和 Delete 。

新 数 据 类 型

M icrosoft SQL Server 中 的 数 据 类 型 包 含 新 功 能 , 以 支 持 新 的 增 强 性 能 。 表

6.9 描 述 了 数 据 类 型 的 新 功 能 。

表 6.9 新数据类型的功能

新数据类型的功能

描述

CAST 转换功能

CONVERT 转换功能的 ANSI / ISO 同 义 词

字符数据和二进制字符串

扩展到 8000 个字节

唯一的标识符

全局唯一标识数的数据类型 ,GUID

nchar、 nvarchar 和文本

统一代码数据类型

+ (Add 和 String Concatenation) 和 -(Subtract)

数据和时间的加法和减法

Cursor 行为

游标变量

数 据 存 储 增 强 功 能

对 数 据 库 上 的 数 据 存 储 进 行 了 某 些 改 变 , 其 中 最 大 的 改 变 是 能 用 ALTER TABLE 删 除 一 列 和 IDENTITY 属 性 的 NOT FOR REPLICATION 从 句 。 表 6.10

表 示 受 影 响 的 存 储 语 句 及 其 增 强 功 能 。

表 6.10 数据存储语句功能的增强

功能项

增强功能的描述

ALTER TABLE

DROP COLUMN 从句,新增了列的非 NULL 缺省项

ALTER VIEW

全局变量

CREATE TABLE

可 为 空 的 位 列 IDENTITY 属 性 的 NOT FORREPLICATIONINSERT 不必执行 SET IDENTITY_INSERT

ON INSERT 语句,通过一个复制连接保存 IDENTITY 值

用户自定义的索引

最 大 为 1024 个字节

新 的 属 性 功 能

M icrosoft SQL Server 7 引 入 了 几 个 新 的 属 性 功 能 。 表 6.11 描 述 了 新 的 属 性功 能 。

表 6.11 新的属性功能

属 性 功 能

描述

COLUMNPROPERTY

显示列或程序参数的信息

OBJECTPROPERTY

显示数据库中对象的信息

TYPEPROPERTY

显示数据类型的信息

DATABASEPROPERTY

显示数据库的信息

INDEXPROPERTY

显示特殊索引的信息

新 的 安 全 性 功 能

M icrosoft SQL Server 7 中 ,在 增 强 安 全 性 方 面 ,增 加 了 与 角 色 和 新 的 Security Identification(SID )数 有 关 的 新 安 全 性 功 能 。 表 6.12 描 述 了 新 的 安 全 性 功 能 。

表 6.12 新的安全性功能

安全性功能

描述

IS_MEMBER

显 示 当 前 用 户 是 否 为 特 定 的 Windows NT 组 或 SQL Server 角色的成员

IS_SRVROLEMEMBER

显示当前注册 ID 或另一个注册 ID (可选)是否为已命名服务器角色的成员

SUSER_SID

显示注册名的安全标识号 (SID)

续 表

SUSER_SNAME

显 示 安 全 标 识 号 中 的 注 册 用 户 名 (SID ,如未给出 SID 则

为当前用户 )

其 他 新 功 能

M icrosoft SQL Server 7 版 本 中 与 新 功 能 相 关 的 其 他 新 特 性 如 表 6.13 所 示 。

表 6.13 其他新功能

功能

描述

LEN

返回字符串中的字符数

NEWID

产生唯一的标识号 (GUID)

REPLACE

用第三个字符串代替第一个字符串中第二个字符串的字符

SUBSTRING

提供文本数据的 SUBSTRING 功能

SYSTEM_USER

niladic 功能

显示 Windows NT 域和用户中已注册的用户名 (只用于 Windows NT Authentication)

FILE_ID

显示已命名文件的文件标识号

FILE_NAME

显示已命名文件标识号的文件名

FILEGROUP_ID

显示已命名文件组的文件组标识号

FILEGROUP_NAME

显示已命名文件组标识号的文件组名

NCHAR

给出指定字符代码值的 Unicode 字 符

UNICODE

给 出 已 命 名 Unicode 字符的 Unicode 整数值

PARSENAME

给出一个对象名的命名部分

续 表

SET @local_variable

将某个值赋给已命名的局部变量,可以和游标变量一同使用

DECLARE

@local_variable

创建游标变量

OPENROWSET

提供 OLE DB 功能以创建分布式查询

Q U O T E N A M E

显示已命名的字符串是有效的引用标识符

VAR

显示统计变化

VARP

显示人口的统计变化

STDEV

显示标准偏差

STDEVP

显示人口的标准偏差

CURSOR_STATUS

显 示 程 序 是 否 返 回 游 标 , 结 果 是 否 为 给 定 的 自 变 量 而 设 置 ,

其中是否有行

GETCHECKSUM

显示校验和的值

查 询 的 增 强 功 能

M icrosoft SQL Server 7 还 对 查 询 的 处 理 进 行 了 一 些 改 变 , 包 括 新 的 优 化 程序 提 示 、 查 询 的 并 行 处 理 和 SET 语 句 中 的 显 示 计 划 增 强 功 能 等 。

表 6.14 描 述 了 查 询 的 增 强 功 能 。

表 6.14 查询的增强功能

查询的增强功能

描 述

ANSI 视图

显 示 SQL Server 元 数 据 的 独 立 于 系 统 表 的 视 图 ,在

改变了系统表后应用程序仍可正常工作

SET ANSI_NULLS

只用于批处理,不能用于存储过程内部

SET SHOWPLAN_ALL

显示将如何执行 Transact-SQL 语句,并估计该语句的资源需求

SET SHOWPLAN_TEXT

SET SHOWPLAN_ALL 的子集

各个查询的并行执行

在多个处理器上并行运行查询

优化程序提示

LOOP 、 HASH 、 MERGE 、 ROBUST PLAN 和

FASTFIRST-ROW 等 都 是 新 的 提 示 READPAST 优

化程序提示可用于 SELECT 语句。该优化程序提示用于给优化程序提供信息,以帮助其更好地执行

已计算的列

能在数据库中存储和检索

SELECT

TO P 、 PERCENT 和 WITH TIES 选项

新 的 优 化 程 序 提 示

应 注 意 某 些 新 优 化 程 序 提 示 , 它 们 可 用 于 SELECT 、 INSERT 、 UPDATE 和

DELETE 语 句 , 并 可 与 Query Analyzer 进 行 通 信 , 以 便 指 明 如 何 执 行 查 询 。 表

6.15 描 述 了 这 些 新 的 优 化 程 序 提 示 。

表 6.15 新的优化程序提示

优化程序提示

描述

READPAST

读 取 过 去 锁 定 的 行 , 再 跳 过 它 们 。 这 与 把

@@LOCK_TIMEOUT 设置为 0 是相同的。该提示可用于 SELECT

{HASH|ORDER} GROUP

查询的 GROUP BY 或 COMPUTE 子句中的集合使用散列或排序

{MERGE|HASH |CONCAT}UNION

表 示 UNION 应 通 过 合 并 、 散 列 或 连 接 这些 设 置 来 执 行 。 如 果 命 名 了 多 个 UNION

提示,则优化程序将选择最佳策略

FAST

对 于 前 几 行 的 快 速 检 索 进 行 优 化 查 询 。 发

送前几行之后,该查询可产生整个结果集

FORCE ORDER

表 示 查 询 的 连 接 排 序 应 在 查 询 优 化 期 间 保

持不变

ROBUST PLAN

在查询优化期间使用数据资源的上限

事 务 处 理 的 增 强 功 能

在 M icrosoft SQL Server 的 事 务 领 域 中 也 增 加 了 一 些 新 功 能 。 现 在 COMMIT 和 ROLLBACK 后 可 以 带 用 户 定 义 的 事 务 名 称 , 并 增 加 了 优 化 程 序 提 示 , 详 细内 容 请 参 阅 上 一 节 。 表 6.16 描 述 了 各 个 事 务 处 理 的 增 强 功 能 。

表 6.16 事务处理的增强功能

事务处理的增强功能

描述

COMMIT [ WORK ]

指 明 事 务 的 结 束 , 现 在 可 以 接 受 用 户 定 义

的事务名

DELETE

优 化 程 序 提 示 增 加 了 : LOOP 、 HASH 、

MERGE 、 ROBUST PLAN 和 FASTFIRST-

ROW 是 新 的 提 示 。 优 化 程 序 提 示 可 用 于

SELECT 、 INSERT 、 UPDATE 和 DELETE

语句

INSERT INTO...SELECT

优 化 程 序 提 示 增 加 了 : LOOP 、 HASH 、

MERGE 、 ROBUST PLAN 和

FASTFIRSTROW 是 新 的 提 示 。 优 化 程 序提 示 可 用 于 SELECT 、 INSERT 、 UPDATE

和 DELETE 语句

ROLLBACK [ WORK ]

回卷到用户指定的事务

UPDATE

优 化 程 序 提 示 增 加 了 : LOOP 、 HASH 、

MERGE 、 ROBUST PLAN 和

FASTFIRSTROW 是 新 的 提 示 。 优 化 程 序提 示 可 用 于 SELECT 、 INSERT 、 UPDATE

和 DELETE 语句

系 统 表 的 增 强 功 能

M icrosoft SQL Server 7 增 加 了 新 的 系 统 表 以 支 持 其 中 的 新 功 能 , 有 许 多 新系 统 表 都 与 版 本 7 的 新 作 业 功 能 相 关 。 表 6.17 描 述 了 新 的 系 统 表 。

表 6.17 新系统表

系 统 表

内容

Sysfiles

每个数据库文件都有行

Sysfilegroups

每个数据库文件组都有行

Syscategories

各类别都有行

Sysdownloadlist

作业下载列表都有行

Sysjobhistory

各作业历史都有行

Sysjobs

各作业都有行

Sysjobschedules

各作业调度都有行

Sysjobservers

各作业服务器都有行

Sysjobsteps

各作业步骤都有行

Systargetservergroupmembers

各目标服务器组成员都有行

Systargetservergroups

各目标服务器组都有行

Systargetservers

各目标服务器都有行

Systaskids

各任务都有行

Sysvolumelabel

用于备份的各递增卷标都有行

Sysoledbusers

每个用户和命名链接服务器的密码映射有一行

如 前 所 述 , Transact-SQL 在 版 本 7 中 进 行 了 许 多 修 改 。 在 下 一 章 中 , 将 回 顾一 下 M icrosoft SQL Server 7 中 这 些 由 旧 版 本 转 化 来 的 新 增 强 工 具 。