第 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.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 中 , 对 触 发 程 序 的 功 能 和 特 性 进 行 了 改 进 。 触 发 程序 已 经 增 加 了 下 列 特 性 :
-
改 变 触 发 程 序
-
可 递 归 调 用 本 身 的 触 发 程 序
-
多 个 触 发 程 序 对 应 一 个 触 发 行 为
-
改 变 触 发 程 序 语 句
-
现 在 用 户 能 改 变 触 发 程 序 对 象 , 而 不 必 从 数 据 库 和 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 中 这 些 由 旧 版 本 转 化 来 的 新 增 强 工 具 。