第1章 Transact-SQL设计工具:SQL Query Analyzer 1
1-1 什么是SQL Query Analyzer 2
1-2 打开SQL Query Analyzer 3
1-3 查询窗口 4
1-4 语句颜色与字体设置 5
1-5 创建新的查询 7
1-6 编辑查询 8
1-7 重要操作技巧 8
1-8 运行查询 9
1-9 使用模板 13
1-10 熟练使用对象浏览器 16
1-11 使用对象搜索功能 24
结论 25
第2章 活用osql公用程序 27
2-1 osql公用程序的使用方式 28
2-2 osql公用程序的语法 31
2-3 运行模式与特殊命令 37
结论 39
第3章 Transact-SQL程序的基本元素 41
3-1 Transact-SQL的组成元素 42
3-2 常量 44
3-3 字符串常量 45
3-4 Unicode字符串常量 45
3-5 二进制常量 45
3-7 日期时间常量 46
3-6 Bit常量 46
3-8 整数常量 51
3-9 Decimal常量 51
3-10 Float与Real常量 51
3-11 货币值常量 52
3-12 全球性唯一标识常量 52
3-13 赋值正数与负数 52
3-14 常量的使用方式 53
3-15 局部变量 53
3-16 table数据类型变量 58
3-17 运算符 60
3-19 如何为程序加上注释 67
3-18 表达式 67
结论 69
第4章 批处理、函数与流程控制命令 71
4-1 批处理 72
4-2 函数 74
4-3 字符串函数 76
4-4 日期时间函数 83
4-5 数学函数 90
4-6 数据类型转换函数 91
4-7 无参数函数 97
4-8 流程控制语言 100
结论 115
第5章 动态创建命令语句 117
5-1 使用EXECUTE命令运行命令字符串 118
5-2 使用系统存储过程sp_exectuesql运行Unicode命令字符串 119
5-3 成批处理原则 120
5-4 参数替换功能 121
结论 126
第6章 SELECT查询彻底研究 127
6-1 SELECT命令语句的语法 128
6-2 简单的SELECT查询 129
6-3 设置查询结果的字段名称 130
6-4 关键字ALL与DISTINCT的使用 132
6-5 查询结果的输出目的地 132
6-6 WHERE参数的条件过滤功能 133
6-7 SELECT的通用字符 137
6-8 常量字符与通用字符冲突时的解决之道 140
6-9 关联条件设置 141
6-10 统计运算的高手:汇总函数 146
6-11 数据分组小计 151
6-12 HAVING参数的使用 154
6-13 ORDER BY参数的使用 155
6-14 查询出名列前茅或垫底者 157
6-15 活用子查询(SubQuery) 160
6-16 自联接(Self-Joins) 165
6-17 合并查询结果 166
6-18 一次查询出各个群组的名列前茅或垫底者 169
6-19 如何使用COMPUTE[BY]参数 171
结论 175
第7章 分布式查询 177
7-1 分布式查询方法一:链接服务器 178
7-2 使用sp_addlinkedserver创建链接服务器 179
7-3 使用SQL Server Enterprise Manager创建链接服务器 192
7-4 如何使用OPENQUERY()函数 194
7-5 如何调用远程存储过程 198
7-6 sp_linkedservers 201
7-7 sp_ropserver 203
7-8 sp_tables_ex 203
7-9 sp_columns_ex 205
7-10 设置分布式查询的OLE DB Provider配置 206
7-11 链接服务器的安全性设置 209
7-12 分布式查询方法二:特定名称 211
7-13 如何使用OPENROWSET()函数 212
7-14 如何使用OPENDATASOURCE()函数 217
7-15 远程数据与Transact-SQL命令 218
7-16 OLEDB Provider的INSERT需求 219
7-17 OLE DB Provider的UPDATE与DELETE需求 225
结论 227
第8章 视图(Views) 229
8-1 视图的基本定义与用途 230
8-2 如何创建视图 231
8-3 熟练使用“索引视图” 237
8-4 活用“分区视图” 243
8-5 可以更新的分区视图 247
8-6 通过视图来更新数据 251
8-7 如何更改视图的名称 254
8-8 如何更改视图的定义 255
8-9 如何删除视图 258
结论 259
第9章 如何开发存储过程(Stored Procedures) 261
9-1 什么是存储过程 262
9-2 存储过程的类型 262
9-3 存储过程的优点 264
9-4 如何创建存储过程 265
9-5 CREATE PROCEDURE 267
9-6 输入参数 273
9-7 输出参数 281
9-8 Cursor数据类型的输出参数 284
9-9 嵌套化存储过程 286
9-10 使用EXECUTE命令运行存储过程 287
9-11 INSERT...EXECUTE 291
9-12 自动运行存储过程 292
9-13 更改存储过程的名称 293
9-14 修改存储过程的定义 294
9-15 删除存储过程 298
9-16 重新编译存储过程 299
结论 300
第10章 如何开发自定义函数 301
10-1 创建自定义函数 302
10-2 创建标量函数 304
10-3 创建多重语句表值函数 310
10-4 创建内嵌表值函数 318
10-5 如何调用自定义函数 320
10-6 更改自定义函数的名称 321
10-7 修改自定义函数的定义 321
10-8 删除自定义函数 324
10-9 将数据写入数据表 324
结论 325
第11章 添加、修改与删除数据日志 327
11-1 使用INSERT...VALUES 328
11-2 使用INSERT...SELECT批处理添加 332
11-3 添加存储过程的查询结果 335
11-4 添加自定义函数返回的数据表 336
11-5 添加查询命令字符串的查询结果 339
11-6 使用SELECT...INTO批处理添加 340
11-7 修改数据日志 341
11-8 删除数据日志 348
结论 351
第12章 如何访问text、ntext与image数据 353
12-1 基本认识 354
12-2 使用text in row选项 356
12-3 使用文本指针 358
12-4 使用TEXTPTR()函数获得文本指针 359
12-5 使用READTEXT命令读取大型对象数据 361
12-6 使用WRITETEXT命令替换大型对象字段数据 363
12-7 使用UPDATETEXT命令更新大型对象字段 364
12-8 使用TEXTVALID()函数检查文本指针是否有效 368
12-9 使用PATINDEX()函数搜索大型文本数据 369
12-10 如何使用SET TEXTSIZE命令 370
12-11 获得大型对象数据的长度 371
结论 372
第13章 如何使用bcp与BULK INSERT完成大量复制操作 373
13-1 从导入与导出数据谈起 374
13-2 使用bcp与BULK INSERT 375
13-3 活用bcp实用工具 377
13-4 bcp实用工具实现练习 380
13-5 活用BULK INSERT命令 388
13-6 BULK INSERT命令实现练习 389
结论 394
第14章 触发器(Trigger) 395
14-1 什么是触发器 396
14-2 设计触发器 396
14-3 如何创建触发器 398
14-4 检查特定的字段是否已被修改 412
14-5 检查某些字段是否已被修改 415
14-6 递归触发器 418
14-8 使用包含ROLLBACK TRANSACTION命令的触发器 419
14-7 嵌套触发器 419
14-9 使用inserted与deleted数据表 422
14-10 单条与多条数据日志的考虑 422
14-11 有条件的INSERT触发器 428
14-12 赋值AFTER触发器的顺序 429
14-13 使用INSTEAD OF触发器更新视图 430
14-14 INSTEAD OF触发器中的表达式与运算字段 437
14-15 在INSTEAD OF触发器中使用text、ntext及image数据 439
14-16 错误信息处理 440
14-17 如何使用RAISERROR命令 441
14-18 如何使用sp addmessage创建自定义错误信息 445
14-20 修改触发器的定义 449
14-19 更改触发器的名称 449
14-21 删除触发器 453
结论 453
第15章 游标(Cursors) 455
15-1 声明游标 456
15-2 游标变量——重要! 465
15-3 如何打开游标 469
15-4 滚动游标(调用数据日志) 470
15-5 如何关闭游标 473
15-6 如何删除游标 474
15-7 熟练使用@@FETCH_STATUS 474
15-8 熟练使用@@CURSOR_ROWS 474
结论 474