目 录
译者序
前言
第一部分 高级编程技术
第1章 利用工具 1
1.1 Microsoft Management Console 1
1.2 使用Enterprise Manager管理
SQL Server 2
1.2.1 工具 3
1.2.2 向导 3
1.2.3 任务 3
1.2.4 任务簿 3
1.2.5 数据库图表 4
1.2.6 用Open Table维护数据 5
1.2.7 SQL Server Profiler 6
1.3 使用Query Analyzer查询SQL Server 6
1.3.1 配置 6
1.3.2 上下文相关帮助 6
1.3.3 颜色编码和字体 7
1.3.4 结果窗格 7
1.3.5 图形SQL执行计划 8
1.3.6 索引分析 8
1.4 小结 9
第2章 超越基本的数据操纵语言 10
2.1 命名约定 10
2.1.1 Microsoft自身的命名分歧 10
2.1.2 命名规则 12
2.2 使用子查询和在线视图 14
2.2.1 T-SQL中的子查询 14
2.2.2 在线视图 18
2.3 外联结. 交叉联结和自联结 21
2.3.1 外联结 21
2.3.2 交叉联结 25
2.3.3 自联结 25
2.4 更高级的DELETE和UPDATE语句 27
2.4.1 DELETE语句的深入研究 27
2.4.2 改进的新UPDATE语句 28
2.5 聚合函数 29
2.5.1 AVG 29
2.5.2 COUNT 30
2.5.3 MAX 30
2.5.4 MIN 30
2.5.5 SUM 30
2.5.6 STDEV 31
2.5.7 STDEVP 31
2.5.8 VAR 31
2.5.9 VARP 31
2.6 GROUP BY和HAVING短语 31
2.6.1 GROUP BY 31
2.6.2 HAVING 32
2.7 合并 32
2.8 小结 32
第3章 查询优化 33
3.1 深入了解索引结构 33
3.1.1 非聚类索引 33
3.1.2 聚类索引 34
3.1.3 聚类索引和非聚类索引的比较 35
3.1.4 复合索引的优缺点 41
3.1.5 索引的数量 43
3.1.6 使用索引检索和更新数据 44
3.2 索引. 事务和数据操作 44
3.3 事务和索引中的锁机制 45
3.3.1 锁的分类 45
3.3.2 使用索引降低锁并发性 46
3.3.3 事务范围. 事务隔离等级和
锁机制 47
3.4 优化查询优化程序 48
3.4.1 使用索引优化程序提示 48
3.4.2 使用锁定优化程序提示 49
3.4.3 在查询中优化表顺序 50
3.5 使用SQL Server Profiler 52
3.5.1 跟踪内容 52
3.5.2 使用SQL Server Profiler标识问题
查询和用户 54
3.5.3 使用Index Tuning Wizard 54
3.6 小结 55
第4章 高级T-SQL语句 56
4.1 使用CAST和CONVERT 56
4.2 输出信息 57
4.3 sysmessages系统表 58
4.3.1 sysmessages中的错误严重等级 59
4.3.2 定义用户自己的消息 59
4.4 报告错误信息 61
4.5 CASE表达式 62
4.5.1 简单CASE表达式 62
4.5.2 高级CASE表达式 64
4.6 分布事务 69
4.6.1 为何使用分布事务协调器 69
4.6.2 使用DTC维持系统间的一致性 70
4.6.3 在成对事务上使用DTC 72
4.6.4 DTC过程疑难解答 77
4.6.5 调试DTC过程 77
4.7 小结 78
第5章 有效使用内建函数 79
5.1 使用算术函数进行计算 79
5.1.1 ABS 80
5.1.2 CEILING 81
5.1.3 FLOOR 81
5.1.4 POWER 82
5.1.5 RAND 82
5.1.6 ROUND 83
5.1.7 SQUARE 84
5.1.8 SQRT 84
5.2 使用日期函数计算日期 84
5.2.1 DATEADD函数 85
5.2.2 DATEDIFF函数 86
5.2.3 DATENAME函数 86
5.2.4 DATEPART函数 86
5.2.5 GETDATE函数 87
5.2.6 DAY函数 87
5.2.7 MONTH函数 87
5.2.8 YEAR函数 87
5.3 使用字符串函数操作字符串 87
5.3.1 CHARINDEX函数 88
5.3.2 DIFFERENCE函数 89
5.3.3 LOWER函数 89
5.3.4 LTRIM函数 89
5.3.5 REVERSE函数 89
5.3.6 RTRIM函数 89
5.3.7 STR函数 90
5.3.8 SUBSTRING函数 90
5.3.9 使用字符串函数的示例 90
5.4 在SQL中使用文本和图像函数 92
5.5 使用SQL函数检索系统信息 93
5.5.1 DATALENGTH函数 94
5.5.2 ISNULL函数 95
5.5.3 HOST_NAME函数 96
5.5.4 SUSER _NAME函数 96
5.5.5 USER函数 96
5.6 小结 96
第6章 使用游标 97
6.1 游标声明 97
6.2 游标使用规则 99
6.2.1 游标规则 99
6.2.2 游标范围 99
6.3 打开. 关闭和移动游标 100
6.3.1 OPEN和CLOSE语句 100
6.3.2 FETCH语句 101
6.4 高级游标使用 103
6.5 使用游标修改数据 113
6.5.1 游标不能自动更新和删除行 113
6.5.2 使用游标做高级更新操作 114
6.6 小结 116
第7章 存储过程 117
7.1 为何使用存储过程 117
7.2 系统存储过程 117
7.2.1 管理存储过程 117
7.2.2 使用存储过程收集信息 118
7.2.3 使用存储过程进行配置和协调 119
7.2.4 使用存储过程监控系统 120
7.3 扩展存储过程 120
7.3.1 为消息传递使用扩展过程 121
7.3.2 使用扩展过程访问操作系统 121
7.4 创建用户自己的存储过程 122
7.4.1 存储过程中的参数 123
7.4.2 OUTPUT参数 124
7.4.3 返回游标作为参数 125
7.4.4 使用存储过程修改数据 125
7.4.5 改变过程 125
7.5 将消息集成到存储过程 126
7.5.1 PRINT语句 126
7.5.2 RAISERROR函数 126
7.5.3 RETURN语句 127
7.6 存储过程的高级应用 127
7.6.1 创建第一个管理表 127
7.6.2 创建档案管理表 128
7.6.3 添加一个用户登录ID 128
7.6.4 修改用户结束日期 133
7.6.5 删除一个用户 133
7.6.6 改善处理过程的建议 136
7.7 小结 136
第8章 高级字符串操作和按位操作 137
8.1 介绍 137
8.2 使用高级字符串操作拼写金额 137
8.2.1 拼写单个数字 137
8.2.2 拼写tens列 139
8.2.3 综合 142
8.2.4 使用过程拼写金额 145
8.3 二进制操作 149
8.3.1 SQL Server中的二进制操作 150
8.3.2 使用按位操作比较值 150
8.3.3 使用二进制进行EBCDIC转换 152
8.4 小结 154
第9章 动态执行 155
9.1 什么是动态执行 155
9.1.1 合法的动态执行语法 155
9.1.2 在何处使用动态执行 156
9.2 创建可执行串 156
9.2.1 动态选择 156
9.2.2 使用存储过程 158
9.2.3 检索元数据 159
9.2.4 动态删除 160
9.2.5 动态更新 164
9.3 使用游标的动态执行 167
9.4 动态执行的优劣 168
9.4.1 动态执行的优点 168
9.4.2 动态执行的常见陷阱 171
9.5 小结 172
第10章 安全问题 173
10.1 鉴别模式 173
10.1.1 安全模式 173
10.1.2 鉴别过程 174
10.1.3 选择一种鉴别模式 175
10.1.4 实现一种鉴别模式的步骤 175
10.1.5 创建登录帐号 176
10.2 给用户和角色分配登录 177
10.2.1 给用户帐号分配登录 177
10.2.2 给角色分配登录 178
10.3 给用户和角色分配权限 181
10.3.1 权限的类型 181
10.3.2 授权. 拒绝和剥夺权限 181
10.4 设计安全策略 183
10.5 管理应用程序的安全性 183
10.5.1 使用存储过程和视图的
安全管理 184
10.5.2 使用应用程序角色进行客户
应用程序管理 184
10.6 小结 185
第11章 专用触发器 186
11.1 嵌套. 递归和触发器基础 186
11.1.1 inserted和deleted表 187
11.1.2 update()函数 188
11.1.3 嵌套触发器 190
11.1.4 递归触发器 190
11.1.5 触发器的T-SQL限制 191
11.1.6 带触发器的系统表作用 191
11.2 使用触发器加强业务规则 193
11.3 触发器检查 198
11.4 存储系统信息 199
11.5 用触发器维护引用完整性 201
11.6 级联删除触发器 205
11.7 级联更新触发器 207
11.8 小结 209
第12章 更新表索引和统计信息 210
12.1 索引性能和调整 210
12.1.1 设计快速的索引 210
12.1.2 分布页面和步进存储数据 211
12.1.3 使用索引密度代替步进值 211
12.1.4 更新分布页面 212
12.2 创建实用程序进行优化表索引 212
12.3 对最后的优化进行验证 213
12.4 自动运行任务 214
12.4.1 自动执行存储过程 215
12.4.2 调度任务 215
12.5 使用DBCC语句监控数据库 218
12.5.1 CHECKALLOC 218
12.5.2 CHECKCATALOG 219
12.5.3 CHECKDB 219
12.5.4 CHECKFILEGROUP 220
12.5.5 CHECKIDENT 220
12.5.6 CHECKTABLE 220
12.5.7 DBREPAIR 221
12.5.8 DBREINDEX 221
12.5.9 dllname 222
12.5.10 INPUTBUFFER 222
12.5.11 NEWALLOC 222
12.5.12 OPENTRAN 222
12.5.13 OUTPUTBUFFER 222
12.5.14 PINTABLE 223
12.5.15 PROCACHE 223
12.5.16 ROWLOCK 223
12.5.17 SHOWCONTIG 223
12.5.18 SHOW_STATISTICS 224
12.5.19 SHRINKDATABASE 224
12.5.20 SHRINKFILE 225
12.5.21 SQLPERF 225
12.5.22 TEXTALL和TEXTALLOC 225
12.5.23 TRACEOFF 225
12.5.24 TRACEON 225
12.5.25 TRACESTATUS 225
12.5.26 UNPINTABLE 225
12.5.27 UPDATEUSAGE 226
12.5.28 USEROPTIONS 226
12.6 小结 226
第13章 交叉制表 227
13.1 交叉制表的描述 227
13.1.1 交叉制表的必要考虑 227
13.1.2 安全性 228
13.1.3 聚合 228
13.1.4 数据分组 229
13.1.5 过程 229
13.2 验证对象的存在 230
13.2.1 验证参数 230
13.2.2 验证数据类型和聚合操作 232
13.3 检查列的安全性 236
13.4 产生列头列表 238
13.4.1 创建colnames表 239
13.4.2 检查列的计数值和长度并
加入行数据 241
13.5 生成交叉表报告 242
13.5.1 创建和修改crosstable 242
13.5.2 更新crosstable值 244
13.5.3 完成任务 250
13.6 小结 252
第二部分 SQL Server必要信息
第14章 编写高效代码 253
14.1 简洁. 高效的代码是好的代码 253
14.1.1 明确目标 253
14.1.2 存储过程的主要逻辑构件 254
14.1.3 编写存储过程的步骤 255
14.1.4 数据检索的示例 256
14.1.5 数据存储的示例 258
14.1.6 数据存档的示例 260
14.1.7 数据删除的示例 262
14.1.8 记录处理的示例 264
14.1.9 业务逻辑的示例 265
14.1.10 优化方法 268
14.1.11 怎样增加可读性 269
14.2 存储过程的模块化 271
14.3 小结 272
第15章 使用多层客户/服务器结构 273
15.1 理解客户/服务器结构 273
15.1.1 客户/服务器模型 273
15.1.2 客户/服务器应用 273
15.1.3 客户/服务器系统 274
15.2 客户/服务器计算结构的发展 274
15.2.1 基于主机的系统 274
15.2.2 两层客户/服务器结构 274
15.2.3 对等系统 275
15.2.4 三层客户/服务器 276
15.3 Web浏览器. Web服务器和
客户/服务器模型 277
15.3.1 两层Web结构 277
15.3.2 三层Web结构 278
15.4 Microsoft的三层服务模型 279
15.4.1 用户服务 279
15.4.2 业务服务 280
15.4.3 数据服务 280
15.5 使用RAD开发工具的多层应用 280
15.5.1 COM和Microsoft应用服务 280
15.5.2 COM和商业应用程序服务 283
15.5.3 RAD和工程生命周期 283
15.5.4 设计和建模 283
15.5.5 开发 284
15.5.6 配置 284
15.6 可扩展性和SQL Server 284
15.6.1 平台可扩展性 285
15.6.2 增强型查询处理 285
15.6.3 动态行锁 285
15.6.4 高级复制 285
15.6.5 移动计算支持 285
15.7 小结 286
第16章 复制 287
16.1 编程人员的复制概念 287
16.1.1 复制语言 287
16.1.2 事务 288
16.1.3 复制如何工作 290
16.1.4 复制局限性 292
16.1.5 复制商业模型 292
16.2 高级复制 293
16.2.1 复制和SQL-DMO 293
16.2.2 存储过程 298
16.2.3 合并复制 299
16.2.4 拨号连接上的复制 300
16.3 小结 301
第三部分 数据转换和集成
第17章 超越Access 303
17.1 判断从Access到SQL Server的
转移需求 303
17.1.1 对企业数据库的要求 304
17.1.2 Access与SQL Server的特性
对比 304
17.2 实现从Access到SQL Server的转移 309
17.2.1 与Visual Basic. Access 以及
SQL Server有关的问题 309
17.2.2 使用DTS Import Wizard 311
17.3 小结 314
第18章 对Sybase SQL Server进行转换 315
18.1 Sybase和Microsoft的发展历程 315
18.2 发展趋势 315
18.3 保留的相似之处 315
18.3.1 系统过程 316
18.3.2 Microsoft T-SQL与Sybase T-SQL
的对比 316
18.4 Microsoft SQL 7和Sybase Adaptive
Server的差别 316
18.4.1 兼容模式 316
18.4.2 事务管理模式 319
18.4.3 隔离等级 319
18.4.4 保留字 320
18.4.5 游标语法 321
18.4.6 回滚触发器 322
18.4.7 优化程序暗示 324
18.4.8 优化查询计划 325
18.4.9 临时表名称 327
18.4.10 RAISERROR语句 327
18.4.11 数据类型 327
18.4.12 标识列 328
18.4.13 PRINT语法 328
18.5 小结 328
第19章 使用Visual C++ 优化ODBC 329
19.1 ODBC体系结构 329
19.2 数据库概要 330
19.3 为何使用ODBC 330
19.3.1 统一连接 331
19.3.2 建立技术 331
19.4 ODBC的安全问题 332
19.5 连接ODBC的方法 333
19.5.1 安装驱动程序 333
19.5.2 使用数据源工作 334
19.6 调用级接口 340
19.6.1 基础 341
19.6.2 连接到数据库 344
19.6.3 语句:操作SQL Server数据 352
19.6.4 提取数据 360
19.6.5 游标 363
19.6.6 端到端:调试ODBC代码 367
19.6.7 使用大数据项 368
19.7 使用Microsoft Foundation Classes
简化ODBC 373
19.7.1 对象模型 373
19.7.2 非常简单:使用记录集和
Class Wizard 376
第20章 从Visual Basic连接SQL Server 384
20.1 为SQL Server开发高效Visual Basic
应用程序 384
20.1.1 三层应用模型:选择一种实现 384
20.1.2 调用级和对象接口:选择一个
接口 386
20.2 使用开放式数据库连接 387
20.2.1 SQL Server的开放式数据库连接
驱动程序 387
20.2.2 连接ODBC数据源 389
20.2.3 执行SQL语句:处理查询 390
20.2.4 结果集 391
20.3 数据访问对象 395
20.3.1 创建和调整数据库:数据定义
语言操作 395
20.3.2 使用记录集:数据操纵语言
操作 399
20.4 远程数据对象 403
20.4.1 RDO与DAO比较 403
20.4.2 RDO层次和rdoEngine对象 404
20.4.3 rdoEnvironment对象 405
20.4.4 建立RDO连接 405
20.4.5 游标和结果集 406
20.4.6 递交查询 410
20.4.7 使用ODBC扩展RDO 411
20.5 小结 411
第21章 通过Visual Basic使用SQL-DMO
管理SQL Server 412
21.1 DMO概念 412
21.1.1 它是什么, 它不是什么 412
21.1.2 从Visual Basic中访问
SQL-DMO对象 412
21.2 实现SQL-DMO对象 413
21.2.1 创建SQL-DMO对象 413
21.2.2 不可创建的对象 414
21.2.3 集 414
21.2.4 列表对象 414
21.3 使用SQL-DMO管理数据库 414
21.4 使用SQL-DMO管理服务器 415
21.5 探索SQL-DMO对象模型 416
21.5.1 SQL-DMO对象模型 416
21.5.2 Application对象 416
21.5.3 SQLServer对象 420
21.5.4 Database对象 422
21.5.5 Table对象 424
21.5.6 JobServer对象 425
21.5.7 Replication对象 426
21.6 SQL-DMO的一般用途 427
21.6.1 用户管理示例 427
21.6.2 文本文件导入/导出示例 430
21.6.3 远程数据库同步示例 431
21.7 构造数据库管理工具 432
21.8 小结 433
第22章 SQL Server数据的自动Web
发布 434
22.1 Web Assistant的构件 434
22.2 使用Web Assistant Wizard 434
22.3 使用xp_makewebtask和
sp_makewebtask 435
22.4 使用sp_makewebtask和
xp_makewebtask精化Web页面 436
22.4.1 sp_makewebtask的必须和基本
的参数 441
22.4.2 页面格式化参数 442
22.4.3 链接相关的参数 443
22.4.4 每页行数参数 444
22.4.5 模板参数 445
22.5 使用工作相关的参数自动Web发布 449
22.6 小结 452
第23章 SQL Server. ADO和Web 453
23.1 数据访问的发展 453
23.2 ADO对象模型 453
23.2.1 ADO主要对象 454
23.2.2 ADO辅助对象 454
23.3 Connection对象 454
23.3.1 事务管理 455
23.3.2 事务考虑 456
23.3.3 连接池 456
23.3.4 执行SQL 457
23.4 Command对象中使用存储过程 458
23.5 Recordset对象 459
23.5.1 检索整个表 460
23.5.2 Recordset基础 460
23.5.3 利用断连记录集 465
23.6 RDS:将ADO移到浏览器 466
23.7 小结 468
第24章 Microsoft的COM和DCOM 469
24.1 DCOM的结构 469
24.1.1 DCE RPC和IDL 470
24.1.2 分布对象 472
24.1.3 DCOM的安全机制 476
24.2 常见技术 477
24.2.1 DCOM服务器 477
24.2.2 配置 478
24.2.3 可扩展性 483
24.2.4 故障 484
24.2.5 性能 484
24.3 小结 484
第25章 未来是Microsoft Transaction
Server的时代 486
25.1 在Internet上应用三层结构 486
25.1.1 客户层 486
25.1.2 业务逻辑层 486
25.1.3 数据层 487
25.2 理解MTS 487
25.2.1 ObjectControl_Activate 488
25.2.2 ObjectControl_Deactivate 488
25.2.3 ObjectControl_CanBePooled 488
25.3 编写MTS事务 489
25.4 配置MTS构件 491
25.5 无状态环境的重要性 492
25.5.1 状态维持限制可扩展性 493
25.5.2 使用Just-in-Time激活 493
25.6 使用MTS最大化系统性能 496
25.6.1 确定是否释放或者中止 496
25.6.2 为Web farm提供无状态性 497
第26章 其他开发平台与SQL服务器
的连接 498
26.1 Delphi的数据库模型 498
26.2 Delphi中的数据库编程 498
26.2.1 使用数据库访问控件 499
26.2.2 数据控件 500
26.2.3 在表单中使用控件 502
26.2.4 表单向导 502
26.2.5 通过代码来访问数据库 503
26.2.6 通过Delphi来管理数据库 503
26.3 PowerBuilder和Microsoft
SQL Server 503
26.3.1 连接数据库 504
26.3.2 ODBC和底层驱动的比较 504
26.3.3 连接数据库 504
26.3.4 使用PowerBuilder管理数据库 507
26.3.5 PowerBuilder数据库对象 509
26.4 Delphi和PowerBuilder, 该用
哪个 515
第27章 将SQL与Microsoft的其他产品
集成 516
27.1 将Access作为SOL Server 7的前端 516
27.1.1 创建Access项目 517
27.1.2 使用Access项目 518
27.1.3 使用Data Access Page 520
27.1.4 Microsoft SQL Server的双向
数据复制 520
27.2 在SQL Server 7中使用Excel 520
27.3 在Internet Information Server和Internet
Explorer中使用SQL Server 521
27.3.1 在服务方访问数据库 521
27.3.2 使用Internet Explorer进行客户端
数据库访问 522
27.4 与Microsoft Transaction Server
集成 522
27.4.1 MTS事务和IIS 523
27.4.2 MTS事务和SQL Server 525
27.4.3 MTS事务处理和可视化编程
工具 526
27.5 小结 527
第28章 工作调度及使用ActiveX Server
实现业务解决方案 528
28.1 使用SQL Server Agent 528
28.2 实现工作 528
28.3 T-SQL工作 529
28.4 在VBScript中运行ActiveX Server 532
28.5 综述 533
28.6 小结 533
第29章 业务解决方案的编程方针 534
29.1 基础结构 534
29.2 源代码管理 534
29.3 数据库需求 534
29.4 设计和开发 535
29.4.1 标准化 535
29.4.2 主键 535
29.4.3 Null约束 536
29.5 编程中优化性能 536
29.5.1 减少数据传输 536
29.5.2 事务中不允许用户输入 537
29.5.3 防止死锁 537
29.5.4 不要混淆OLTP和OLAP 538
29.5.5 避免耗时较长的查询 538
29.6 测试数据库应用 538
29.7 修改第三方SQL Server应用 538
29.8 小结 539
第30章 数据仓库和在线事务处理 540
30.1 SQL Server作为数据仓库 540
30.2 实现数据仓库 541
30.2.1 确定需求 541
30.2.2 设计和构造数据库 541
30.3 如何为仓库清理数据 548
30.3.1 使用数据迁移服务 548
30.3.2 使用bcp载入数据 549
30.3.3 使用存储过程载入数据 549
30.3.4 使用复制载入数据 551
30.3.5 CUBE和ROLLUP操作 553
30.3.6 批处理 558
30.4 大型查询和性能优化 558
30.4.1 查询数据 558
30.4.2 视图 560
30.4.3 存储过程 560
30.5 仓库维护任务 561
30.6 SQL Server和OLTP系统 561
30.6.1 OLTP问题 561
30.6.2 创建数据库 561
30.6.3 索引数据库 562
30.6.4 事务 563
30.6.5 锁 565
30.6.6 死锁 567
30.7 优化SQL Server作为OLTP系统 569
30.7.1 事务核对清单 569
30.7.2 配置选项 570
30.8 监视性能 571
30.8.1 内存和过程cache 571
30.8.2 输入/输出 571
30.8.3 事务配置选项 571
30.9 小结 571
第四部分 附 录
附录A Master数据库的系统表 573
附录B 所有数据库的系统表 584
附录C 常见错误信息 598