第1部分 基础
第1章 存储过程初步
1.1 什么是存储过程
1.2 存储过程的优点
1.3 创建存储过程
1.3.1 滞后名称解析与一个有趣的异常
1.3.2 列表显示一个存储过程
1.3.3 权限与限制
1.3.4 创建忠告
1.4 修改存储过程
1.5 执行存储过程
1.5.1 INSERT与EXEC
1.5.2 执行计划的编译与执行
1.5.3 监视执行
1.5.4 经由远程过程调用(RPC)执行存储过程
1.5.5 临时过程
1.5.6 系统过程
1.5.7 系统对象与系统过程
1.6 扩展的存储过程
1.7 环境问题
1.8 参数
1.8.1 返回状态码
1.8.2 输出参数
1.8.3 列表显示过程参数
1.8.4 通用参数注解
1.8.5 自动变量亦称系统函数
1.9 流程控制语言
1.10 出错
1.10.1 出错消息
1.10.2 RAISERROR
1.11 嵌套
1.12 递归
1.13 小结
第2章 推荐的约定
2.1 源代码格式化
2.1.1 大写
2.1.2 缩进与空白
2.1.3 BEGIN/END
2.1.4 圆括号
2.1.5 水平间隔
2.1.6 列与表的别名
2.1.7 DDL
2.1.8 拥有者限定
2.1.9 缩写与可选关键字
2.1.10 参数传递
2.1.11 名称选择
2.2 编码约定
2.2.1 脚本建议
2.2.2 存储过程与函数
2.2.3 表与视图
2.2.4 Transact-SQL
2.3 小结
第3章 常见设计模式
3.1 简约原则
3.2 惯例
3.2.1 元数据查询
3.2.2 对象创建
3.2.3 设置数据库上下文
3.2.4 清空表
3.2.5 复制表
3.2.6 变量赋值
3.2.7 循环
3.2.8 空值支持
3.2.9 最顶层行检索
3.3 设计模式
3.3.1 迭代程序
3.3.2 Intersector
3.3.3 Qualifier
3.3.4 Executor
3.3.5 Conveyor
3.3.6 Restorer
3.3.7 原型
3.3.8 Singleton
3.3.9 其他模式
3.4 小结
第4章 源代码管理
4.1 源代码管理的好处
4.2 dt过程
4.3 最优实践
4.3.1 在脚本中保存对象
4.3.2 维护分离的脚本
4.3.3 不要使用Unicode
4.3.4 使用标志表示版本
4.3.5 使用关键字给文件签名
4.3.6 除非绝对必须,不要加密
4.4 来自于Query Analyzer的版本控制
4.5 使用版本控制的自动脚本生成
4.5.1 GGSQLBuilder
4.5.2 GGSQLBuilder如何运作
4.5.3 脚本生成工具的优点
4.5.4 GGSQLBuilder如何选择并排列SQL脚本
4.6 小结
第5章 数据库设计
5.1 通用方法
5.2 建模工具
5.3 范例项目
5.4 五个过程
5.5 考察五个阶段
5.5.1 分析
5.5.2 设计
5.5.3 构造
5.5.4 数据库开发的复杂性
5.5.5 应用数据库理论
5.5.6 定义应用程序的目标
5.5.7 定义应用程序的功能
5.5.8 设计数据库基础和应用过程
5.6 业务过程建模
5.6.1 开始业务过程建模
5.6.2 增加外部实体
5.6.3 增加过程
5.6.4 增加存储
5.6.5 增加流程对象
5.6.6 增加数据结构
5.7 实体一关系建模
5.7.1 E-R图的类型
5.7.2 E-R建模术语
5.7.3 建立E-R模型
5.7.4 规地化
5.7.5 完成模型
5.8 关系型数据建模
5.8.1 逻辑数据建模术语
5.8.2 从E-R图转向关系模型
5.8.3 构造数据字典
5.8.4 使用数据字典
5.8.5 确定列的大小
5.8.6 设计描述
5.8.7 外部键生成
5.8.8 模型完整性验证
5.8.9 DDL生成
5.8.10 Enterprise Manager的Database Diagrams
5.9 小结
第6章 数据容量
6.1 数据生成方法
6.1.1 交叉联接
6.1.2 Random()
6.1.3 Doubling
6.1.4 INSERT…EXEC
6.1.5 sp_generate_test_data
6.2 速度
6.3 小结
第2部分 目标
第7章 错误处理
7.1 错误报告
7.1.1 RAISERROR
7.1.2 xp_logevent
7.2 处理错误
7.2.1 @@ERROR
7.2.2 用户错误
7.2.3 致命错误
7.2.4 看上去怪癖其实不然的问题
7.2.5 @@ROWCOUNT
7.2.6 错误和事务管理
7.2.7 SET XACT_ABORT
7.3 小结
第8章 触发器
8.1 决定有什么变化
8.2 管理连续值
8.3 触发器限制
8.4 INSTEAD OF触发器
8.5 触发器和审计
8.6 事务
8.7 执行
8.8 调用存储过程
8.9 嵌套的触发器
8.10 禁用触发器
8.11 最优实践
8.12 小结
第9章 视图
9.1 元数据
9.2 约束
9.2.1 ANSI_NULLS和QUOTED_IDENTIFIER
9.2.2 DML约束
9.3 ANSI SQL模式视图
9.3.1 创建自己的INFORMATION SCHEMA视图
9.3.2 创建自己的INFORMATION SCHEMA用户定义函数
9.3.3 从视图调用存储过程
9.4 可更新的视图
9.5 WITH CHECK OPTION子句
9.6 派生表
9.7 参数化视图
9.8 动态视图
9.9 分区视图
9.9.1 BETWEEN和分区视图查询
9.9.2 分布式分区视图
9.10 索引视图
9.10.1 优化程序使用索引视图
9.10.2 在SQL Server的其他版本上使用索引视图
9.11 设计模块化索引视图
9.12 小结
第10章 用户定义的函数
10.1 标量函数
10.2 表值函数
10.3 内联函数
10.4 限制
10.5 元数据
10.6 创建用户自己的系统函数
10.7 UDF详尽说明书
10.7.1 改进的SOUNDEX()函数
10.7.2 统计函数
10.7.3 递归
10.7.4 参数化UDF
10.8 小结
第3部分 HTML、XML和.NET
第11章 HTML
11.1 起源
11.2 从Transact-SQL制作HTML
11.2.1 表
11.2.2 列标题
11.3 从sp_makewebtask制作HTML
11.3.1 超链接
11.3.2 模板
11.4 小结
第12章 XML入门
12.1 注意
12.2 XML:概观
12.3 HTML:简易的代价
12.4 简史
12.5 XML与HTML比较:一个例子
12.6 文档类型定义
12.7 XML架构
12.8 扩展样式表语言转换
12.9 文档对象模型
12.10 工具
12.11 小结
第13章 XML和SQL Server:HTTP查询
13.1 基于HTTP访问SQL Server
13.2 URL查询
13.2.1 特殊字符
13.2.2 样式表
13.2.3 内容类型
13.2.4 非XML结果
13.2.5 存储过程
13.3 模板查询
13.3.1 样式表
13.3.2 在客户上应用样式表
13.3.3 客户端模板
13.4 小结
第14章 XML和SQL Server:获取数据
14.1 SELECT…FOR XML
14.2 RAW模式
14.3 AUTO模式
14.4 元素
14.5 EXPLICIT模式
14.5.1 指令
14.5.2 建立数据关系
14.6 映射架构
14.7 小结
第15章 XML和SQL Server:OPENXML
15.1 标记参数
15.2 边缘表格式
15.3 用OPENXMLO插入数据
15.4 Web版本1
15.4.1 Updategrams
15.4.2 XML批量加载
15.5 限制
15.5.1 sp_xml_concat
15.5.2 sp_run_xml_proc
15.6 小结
第16章 .NET和未来革命
16.1 .NET:应用程序开发的未来
16.2 什么是.NET
16.3 打击Microsoft
16.4 Microsoft偏执
16.5 小结
第4部分 高级篇
第17章 性能
17.1 索引
17.1.1 存储
17.1.2 覆盖索引
17.1.3 性能问题
17.1.4 索引交集
17.1.5 索引碎片
17.1.6 碎片整理
17.1.7 视图和计算列上的索引
17.1.8 前提
17.1.9 锁定和索引
17.2 统计
17.2.1 基数
17.2.2 密度
17.2.3 选择性
17.2.4 性能问题
17.2.5 存储
17.2.6 列统计
17.2.7 列表统计
17.2.8 更新统计
17.2.9 sp_showstatdate
17.3 查询优化
17.3.1 普通计划优化
17.3.2 简化
17.3.3 统计数字加载
17.3.4 基于代价的优化
17.3.5 完全优化
17.3.6 选择性评估
17.3.7 优化搜索参数
17.3.8 联接顺序和类型选择
17.3.9 子查询和联接两者取一
17.3.10 逻辑运算符和物理运算符
17.4 小结
第18章 调试与配置
18.1 调试
18.1.1 设置与安全问题
18.1.2 建议与警告
18.1.3 步骤
18.1.4 没有网络的调试
18.1.5 调试触发器和用户定义函数
18.2 配置
18.2.1 开始跟踪
18.2.2 跟踪与查看
18.2.3 命令行参数
18.2.4 一般建议与警告
18.2.5 重放跟踪
18.2.6 加载跟踪文件到表
18.2.7 跟踪文件发布为XML
18.2.8 分组Profiler数据
18.2.9 ODBC跟踪
18.3 应力测试
18.4 小结
第19章 自动化
19.1 COM简介
19.1.1 COM之前
19.1.2 COM的曙光
19.1.3 基本体系结构
19.2 SQL Server和COM自动化
19.2.1 sp_OA过程
19.2.2 sp_checkspelling
19.2.3 sp_exportable
19.2.4 sp_importable
19.2.5 sp_getSQLregistry
19.3 小结
第20章 扩展存储过程
20.1 开放数据服务
20.1.1 启动代码
20.1.2 扩展过程活动
20.1.3 返回数据
20.2 一个简单的例子
20.3 一个更好的例子
20.4 使扩展过程更容易使用
20.5 调试扩展过程
20.6 隔离扩展过程
20.7 xp_setpriority
20.8 小结
第21章 管理存储过程
21.1 sp_readtextfile
21.2 sp_diff
21.3 sp_generate_script
21.4 sp_start_trace
21.5 sp_stop_trace
21.6 sp_list_trace
21.7 sp_proc_runnef
21.8 sp_create_backup_job
21.9 sp_diffdb
21.10 小结
第22章 非文档化的Transact SQL
22.1 怎么定义非文档化
22.2 非文档化的过程
22.2.1 sp_checknames[@mode]
22.2.2 sp_delete_backuphistory@oldest_date
22.2.3 sp_enumerrorlogs
22.2.4 sp_enumoledbdatasources
22.2.5 sp_fixindex@dbname,@tabname,@indid
22.2.6 sp_gettypestring@tabid,@colid,@typestring output
22.2.7 sp_MS_marksystemobject@objname
22.2.8 sp_MS_upd_sysobj_category@pSeqMode integer
22.2.9 sp_MSaddguidcol@source_owner,@source_table
22.2.10 sp_MSaddguidindex@source_owner,@source_table
22.2.11 sp_MSaddlogin_implicit_ntlogin@loginname
22.2.12 sp_MSadduser_implicit_ntlogin@ntname
22.2.13 sp_MScheck_uid_owns_anything@uid
22.2.14 sp_MSdbuseraccess@mode=‘perm’|‘db’,@qual=db name mask
22.2.15 sp_MSdbuserpriv@mode=‘perm’|‘serv’|‘ver’|‘role’
22.2.16 sp_MSdependencies@objname,@objtype,@flags int,@objlist
22.2.17 sp_MSdrop_object[@object_id][,@object_name][,@object_owner]
22.2.18 sp_MSexists_file@full_path,@filename
22.2.19 sp_MSforeachdb@command1 @replacechar=‘?’[,@command2][,@command3][,@precommand][,@postcommand]
22.2.20 sp_MSforeachtable @command1 @replacechar=‘?’[,@com mand2][,@command3][,@whereand][,@precommand][,@postc ommand]
22.2.21 sp_MSget_oledbinfo @server[,@infotype][,@login][,@password]
22.2.22 sp_MSget_qualified_name @object_id,@qualified_name OUT
22.2.23 sp_MSget_type @tabid,@colid,@colname OUT,@type OUT
22.2.24 sp_MSguidtostr @guid,@mystr OUT
22.2.25 sp_MShelpindex @tablename[,@indexname][,@flags]
22.2.26 sp_MShelptype[@typename][,@flags=‘sdt’|‘uddt’|NULL]
22.2.27 sp_MSindexspace @tablename[,@index_name]
22.2.28 sp_MSis_pk_col @source_table,@colname,@indid
22.2.29 sp_MSkilldb@dbname
22.2.30 sp_MSloginmappings@loginname
22.2.31 sp_MStable_has_unique_index@tabid
22.2.32 sp_MStablekeys[tablename][,@colname][,@type][,@keyname][,@flags]
22.2.33 sp_MStablerefs@tabname,@type=N'actualtables',@direction=N'primary',@reftable
22.2.34 sp_MStablespace[@name]
22.2.35 sp_MSunc_to_drive@unc_path,@local_server,@local_path OUT
22.2.36 sp_MSuniquecolname table_name,@base_colname,@unique_colname OUT
22.2.37 sp_MSuniquename@seed,@start
22.2.38 sp_MSuniqueobjectname@name_in,@name_out OUT
22.2.39 sp_MSuniquetempname@name_in,@name_out OUT
22.2.40 sp_readerrorlog[@lognum]
22.2.41 sp_remove_tempdb_file@filename
22.2.42 sp_set_local_time[@server_name][,@adjustment_in_minutes](对Win9x)
22.2.43 sp_tempdbspace
22.2.44 xp_dirtree‘rootpath’
22.2.45 xp_dsninfo@systemdsn
22.2.46 xp_enum_oledb_providers
22.2.47 xp_enumdsn
22.2.48 xp_enumerrorlogs
22.2.49 xp_execresultset‘code query’,‘database’
22.2.50 xp_fileexi'st‘filename’
22.2.51 xp_fixeddrives
22.2.52 xp_get_MAPI_default_profile
22.2.53 xp_get_MAPI_profiles
22.2.54 xp_getfiledetails‘filename’
22.2.55 xp_getnetname
22.2.56 xp_oledbinfo@providername,@datasource,@ocation@providerstring,@catalog,@login,@password,@infotype
22.2.57 xp_readerrorlog[lognum][filename]
22.2.58 xp_regenumvalues
22.2.59 xp_regaddmultistr,xp_regdeletekey,xp_regdeletevalue,xp_regread,xp_regremovemultistring,xp_regwrite
22.2.60 xp_subdirs
22.2.61 xp_test_MAPI_profile‘profile’
22.2.62 xp_varbintohexstr
22.3 创建INFORMATION_SCHEMA视图
22.4 创建系统函数
22.5 非文档化的DBCC命令
22.6 非文档化的函数
22.7 非文档化的跟踪标记
22.8 小结
第23章 数组
23.1 xp_array.dll
23.1.1 xp_createarray
23.1.2 xp_setarray
23.1.3 xp_getarray
23.1.4 xp_destoryarray
23.1.5 xp_listarray
23.2 数组系统函数
23.3 主要项目
23.4 多维数组
23.5 小结
第5部分 扩软件工程短评
第24章 创建可工作的环境
24.1 摆脱干扰
24.2 关上门
24.3 内部干扰
24.4 形式的作用
24.5 沉默是金:沟通是神圣的
24.6 小结
24.7 结束语
第25章 进化式开发
25.1 Kaizen
25.2 小的改变的益处
25.3 软件
25.4 软件熵
25.5 再评估
25.6 对再评估的销售(或人工)管理
25.7 何时不进行再评估
25.8 数据库
25.9 是否可以通过再评估来代替设计
25.10 代码消亡
25.11 极度编程
25.11.1 代码在前,思考在后
25.11.2 补救措施
25.12 小结
25.13 结束语
第26章 完整测试
26.1 从哪里开始
26.2 测试的无用性
26.3 测试类型
26.3.1 单元测试
26.3.2 功能测试
26.3.3 逆向测试
26.3.4 集成测试
26.4 测试时机
26.5 测试可以节约时间
26.6 极度编程中的测试
26.7 其他类型的测试
26.7.1 代码检查
26.7.2 代码阅读
26.7.3 检查
26.7.4 遍历
26.8 小结
26.9 结束语