Microsoft SQL Server 2005 T-SQL & .NET高级编程(第3版)

Microsoft SQL Server 2005 T-SQL & .NET高级编程(第3版)
作 者: Dejan Dejan Šunderić
出版社: 清华大学出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: Server
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Dejan Sunderic,微软认证的解决方案专家(MCSD)和数据库管理员(MCDBA),是Trigon Blue,Inc.的首席顾问,也是Toronto SQL Server User Group的总裁。他专门研究SQL Server和Windows平台上的数据库管理、部署及应用程序开发。Dejan曾经参与的项目涉及B2C和B2B电子商务、金融、文档管理、抵押、资产管理、保险、房地产、IT供应链、过程控制、通信、数据仓库和OLAP系统等多个领域。担任过数据库架构师、数据库和应用程序开发人员、数据库管理员、开发组组长及项目经理。

内容简介

为了开发出复杂的存储过程以检索、操作、更新和删除数据,本书介绍并描述了您所需掌握的关键概念、技术和最佳实践,以使您通过SQL Server自带的Transact—SQL和.NET CLR语言充分利用存储过程。在本书中,您将学到如何将有效的Transact.-SQL存储过程结合到客户端与中间件代码中,以及如何生成将被编译到CLR存储过程中的CLR方法。本书内容丰富、指导性强,是所有SQL Server 2005开发人员的必备参考。本书主要内容●使用批处理、脚本与事务来组合和执行T-SQL语句●创建用户自定义的、系统的、扩展的、临时的、全局临时的和远程的存储过程●使用ADO.NET实现数据库访问●用C#和Visual Basic.NET开发与管理存储过程●创建CLR用户自定义函数与触发器●实现可靠的调试、错误处理技术和安全度量●在类似于Visual SourceSafe的储存库中管理源代码●为Web搜索引擎创建存储过程●使用系统和扩展存储过程与SQL Server环境进行交互

图书目录

第1章 SQL Server 2005环境

与工具 1

1.1 SQL Server 2005工具 2

1.1.1 SQL Server Configuration

Manager 3

1.1.2 SQL Server Management

Studio 6

1.1.3 SQLCMD实用程序 10

1.1.4 SQL Server Profiler 11

1.1.5 帮助文档和SQL Server

Books Online 11

1.2 Management Studio中的

基本操作 12

1.2.1 存储结构的定义 12

1.2.2 Management Studio中存储

过程的执行 12

1.2.3 编辑存储过程 15

1.2.4 创建存储过程 15

1.2.5 在Query窗口中编辑存储

过程 17

1.2.6 语法错误 19

1.2.7 查看和编辑表 21

1.2.8 修改表结构 23

第2章 存储过程设计的一些概念 25

2.1 存储过程的剖析 26

2.1.1 组成部分 26

2.1.2 功能 29

2.1.3 语法 35

2.2 存储过程的类型 37

2.3 管理存储过程 38

2.3.1 列出存储过程 38

2.3.2 查看存储过程的代码 39

2.3.3 重命名存储过程 40

2.3.4 删除存储过程 41

2.3.5 列出被依赖和依赖对象 41

2.4 存储过程在数据库应用程序

开发中的作用 43

2.4.1 增强数据完整性 43

2.4.2 复杂业务规则和约束的

一致实现 44

2.4.3 模块化设计 44

2.4.4 可维护性 44

2.4.5 降低的网络通信量 44

2.4.6 较快的执行 45

2.4.7 安全性的增强 45

第3章 基本Transact-SQL编程

结构 47

3.1 T-SQL标识符 48

3.2 数据库对象限定符 49

3.3 数据类型 51

3.3.1 字符串型 52

3.3.2 Unicode字符串型 53

3.3.3 日期和时间型 54

3.3.4 整型 55

3.3.5 近似数值型 56

3.3.6 精确数值型 56

3.3.7 货币型 57

3.3.8 二进制型 57

3.3.9 特殊类型 58

3.3.10 Transact-SQL用户自定义

数据类型 61

3.4 变量 62

3.4.1 局部变量 62

3.4.2 全局变量 66

3.4.3 表变量 68

3.5 流程控制语句 69

3.5.1 注释 70

3.5.2 语句块:Begin…End 72

3.5.3 条件执行:If语句 73

3.5.4 循环:While语句 77

3.5.5 无条件执行:GoTo语句 79

3.5.6 调度执行:WaitFor语句 80

3.6 游标 81

3.6.1 Transact-SQL游标 82

3.6.2 与游标相关的语句和函数 85

3.6.3 使用游标的问题 86

3.6.4 游标的正确用法 87

第4章 函数 89

4.1 函数的用法 90

4.1.1 用函数来选择和赋值 90

4.1.2 作为选择条件的一部分 91

4.1.3 在表达式中使用函数 91

4.1.4 作为Check和Default约束 91

4.1.5 取代表 92

4.2 函数的类型 93

4.2.1 标量函数 93

4.2.2 行集函数 120

第5章 复合Transact-SQL结构:

批处理、脚本和事务 127

5.1 批处理 128

5.1.1 使用批处理 130

5.1.2 批处理与错误 130

5.1.3 DDL批处理 133

5.1.4 自给自足的内容 133

5.2 脚本 134

5.3 事务 137

5.3.1 自动提交事务 137

5.3.2 显式事务 138

5.5.3 隐式事务 140

5.3.4 事务处理体系结构 140

5.3.5 嵌套事务 141

5.3.6 命名事务 145

5.3.7 保存点 146

5.3.8 加锁 148

5.3.9 分布式事务 152

5.3.10 与事务相关的典型问题 154

第6章 错误处理 157

6.1 Raiserror语句 158

6.2 使用错误处理 160

6.3 添加错误处理代码的原因 160

6.4 基于@@Error的错误处理 161

6.5 Try-Catch语句 163

6.5.1 捕获的错误类型 164

6.5.2 Catch块的函数 166

6.5.3 带显式事务的Try-Catch

语句 167

6.5.4 死锁重试 170

6.5.5 Try-Catch语句嵌套 174

6.5.6 错误处理体系结构:

使用Try-Catch语句 174

6.6 Xact_Abort选项的设置 175

6.6.1 错误处理体系结构:基于

Set Xact_Abort On设置 176

6.6.2 错误处理体系结构:设置

Xact_Abort且事物嵌套

为零 180

第7章 特殊存储过程类型 187

7.1 用户自定义存储过程 188

7.2 系统存储过程 188

7.3 CLR存储过程 189

7.4 扩展存储过程 190

7.4.1 扩展存储过程的设计 190

7.4.2 注册扩展存储过程 194

7.5 临时存储过程 196

7.6 全局临时存储过程 197

7.7 远程存储过程 197

第8章 视图 199

8.1 标准SQL视图的设计 200

8.1.1 语法 201

8.1.2 Enterprise Manager中的

视图设计 202

8.1.3 安全性 202

8.1.4 执行计划中的标准SQL

视图 203

8.1.5 视图的限制 203

8.1.6 用视图编辑数据 204

8.2 动态视图 205

8.3 临时视图—— 通用表表达式 205

8.3.1 非递归CTE的限制 206

8.3.2 递归CTE 206

8.4 INFORMATION_SCHEMA

视图 208

8.5 索引视图 209

8.5.1 索引视图限制 209

8.5.2 执行计划中的索引视图 210

8.5.3 视图上的非群集索引 210

8.5.4 性能影响 211

8.6 分区视图 211

8.6.1 水平和垂直分区 211

8.6.2 分布式分区视图 213

8.6.3 分布式分区视图的

执行计划 218

8.6.4 可更新的分布式分区视图 221

8.6.5 分布式系统的稳定性

和性能 222

8.6.6 简单的联合服务器 223

8.7 使用SQL视图 223

8.7.1 导出和导入 223

8.7.2 安全性实现 223

8.7.3 降低复杂性 224

8.7.4 性能提升 226

第9章 触发性 227

9.1 DML触发器 228

9.1.1 After触发器的物理设计 228

9.1.2 插入和删除虚拟表 229

9.1.3 触发器激活条件 231

9.1.4 After触发器的完整语法 232

9.1.5 处理多条记录上的修改 235

9.1.6 嵌套触发和递归触发 236

9.1.7 After触发器限制 236

9.1.8 Instead-of触发器 238

9.1.9 视图上的触发器 239

9.1.10 DML触发器的执行次序 241

9.2 DDL触发器 242

9.2.1 DDL触发器的作用域和

事件 243

9.2.2 EventData()函数 244

9.2.3 DDL触发器的语法 245

9.3 管理触发器 246

9.3.1 在Management Studio中

管理DML触发器 246

9.3.2 在Management Studio中

管理DDL触发器 247

9.3.3 用Transact-SQL语句管理

触发器 247

9.4 触发器的设计建议 250

9.4.1 尽可能快地退出触发器 250

9.4.2 简化触发器的代码 251

9.4.3 按功能实现触发器 252

9.4.4 不要在触发器内使用

Select和Print 252

9.4.5 根本不要使用触发器 252

9.5 触发器中的事务管理 252

9.6 使用触发器 253

9.6.1 级联删除 254

9.6.2 聚集 257

9.6.3 增强不同服务器或数据库上

的对象的模式完整性 259

第10章 用户自定义函数 263

10.1 标量用户自定义函数的设计 264

10.1.1 副作用 265

10.1.2 内置函数的使用 266

10.1.3 加密 266

10.1.4 模式绑定 266

10.2 表-值用户自定义函数 267

10.3 在Management Studio中管理

用户自定义函数 271

第11章 SQL Server 2005中的

.NET编程基础 273

11.1 非托管和托管代码 274

11.2 公共语言运行库 274

11.3 SQL Server 2005中的CLR

集成 275

11.3.1 优缺点 276

11.3.2 支持和不支持的功能 276

11.3.3 所需最小空间 277

11.4 Visual Studio 2005中CLR

数据库对象的 开发、部署

和使用 278

11.5 不使用Visual Studio 2005

时CLR数据库对象

的开发和部署 281

11.5.1 开发代码 282

11.5.2 编译程序 282

11.5.3 向SQL Server数据库中

加载程序集 284

11.5.4 创建SQLCLR数据库

对象 285

11.6 为程序集和CLR数据库

对象编目录 286

11.6.1 为程序集编目录 286

11.6.2 为过程编目录 287

11.6.3 .NET Framework的版本 289

第12章 CLR存储过程开发基础 291

12.1 CLR存储过程的结构 294

12.2 从CLR过程中访问数据 295

12.3 使用存储过程的基本操作 296

12.3.1 返回值 296

12.3.2 连接上下文 297

12.3.3 返回结果 298

12.3.4 返回自定义记录 300

12.3.5 CLR存储过程中的

参数 302

12.4 带正规ADO.NET对象

的操作 302

12.4.1 SqlCommand 302

12.4.2 SqlDataReader 304

12.5 管理LOB参数 305

第13章 CLR函数与触发器 311

13.1 CLR函数 312

13.1.1 标量-值CLR函数 312

13.1.2 SqlFunction属性 314

13.1.3 表-值CLR函数 316

13.2 CLR触发器 327

13.2.1 支持的特性 327

13.2.2 DML触发器的创建 327

13.2.3 DDL触发器的创建 332

第14章 CLR数据库对象高级主题 337

14.1 CLR用户自定义类型(UDT) 338

14.1.1 托管UDT的结构 339

14.1.2 不使用Visual Studio 2005

部署CLR UDT 346

14.1.3 使用CLR用户自定义

类型 346

14.1.4 跨数据库的用户自定义

类型 353

14.2 是否使用UDT 354

14.3 用户自定义聚合CLR函数 355

14.4 CLR代码中的事务 365

14.4.1 使用TransactionScope

类 365

14.4.2 事务选项 367

14.4.3 分布式事务 368

14.4.4 显式事务 370

14.4.5 新事务泛型的优点 372

14.5 是否设计CLR(设计与性能

考虑) 372

14.6 警告 373

第15章 高级存储过程编程 375

15.1 动态构造的查询 376

15.1.1 执行字符串 376

15.1.2 通过表单查询 377

15.1.3 数据脚本生成器 379

15.1.4 使用sp_executesql存储

过程 384

15.1.5 安全隐患 385

15.2 使用timestamp值的

乐观锁 388

15.2.1 timestamp数据类型 389

15.2.2 TSEqual()函数 391

15.3 全文本搜索和索引 392

15.4 嵌套存储过程 393

15.4.1 用临时表向嵌套存储

过程传递记录集 393

15.4.2 用游标向嵌套存储过程

传递记录集 396

15.4.3 如何处理存储过程的

结果集 397

15.5 使用标识值 403

15.5.1 标准问题和答案 403

15.5.2 标识值与触发器 404

15.6 GUID 405

15.7 带Min()或Max()函数

的循环 407

15.8 带sp_MSForEachTable和

sp_MSForEachDb 的循环 408

15.9 特性管理 410

第16章 调试 413

16.1 什么是bug 414

16.2 调试过程 414

16.2.1 标识阶段 414

16.2.2 解决阶段 416

16.3 调试工具与技术 417

16.4 调试CLR数据库对象 421

16.5 简单的调试器 424

16.5.1 生产环境中的执行 427

16.5.2 嵌套存储过程 428

16.5.3 输出子句 428

16.6 SQL Profiler 429

16.7 典型错误 433

16.7.1 处理空值 433

16.7.2 从结果集中为变量赋值 434

16.7.3 没有记录受影响 434

16.7.4 错误的大小或数据类型 434

16.7.5 默认长度 435

16.7.6 触发器的回退 435

16.7.7 警告和较低优先级

的错误 435

16.7.8 返回代码与Raiserror

语句的使用 436

16.7.9 嵌套注释 436

16.7.10 延迟名称解析 436

16.7.11 游标 437

16.7.12 过分自信 437

第17章 源代码管理 439

17.1 Microsoft Visual SourceSafe

介绍 440

17.2 管理Visual SourceSafe

数据库 441

17.3 在Visual Studio .NET中

向Visual SourceSafe 添加

数据库对象 442

17.4 在Visual Studio .NET中

管理Create脚本 444

17.5 Visual SourceSafe Explorer 445

17.5.1 历史 446

17.5.2 标签与版本 448

17.6 向Visual SourceSafe添加

数据库对象:传统方法 449

17.6.1 用Script Wizard创建

脚本 449

17.6.2 用TbDbScript创建

脚本 451

17.6.3 用TbDir2Vss.vbs向

Visual SourceSafe中

添加脚本 453

第18章 数据库部署 455

18.1 整个数据库的部署:传统

方法 456

18.1.1 在Transact-SQL中附着

与分离数据库 457

18.1.2 在Management Studio中

附着和分离 458

18.1.3 备份与恢复 459

18.1.4 潜在的问题 459

18.2 单个对象的部署 460

18.2.1 部署脚本:传统方法 460

18.2.2 脚本化数据:传统方法 460

18.2.3 在Visual Studio .NET中

脚本化数据 461

18.2.4 部署脚本:传统方法 462

18.2.5 在Visual Studio .NET中

部署Create脚本 469

18.2.6 递增的构件:传统方法 471

18.2.7 Visual Studio .NET中的

递增的构件 472

第19章 安全 473

19.1 安全体系结构 474

19.1.1 身份验证与授权 474

19.1.2 主体 474

19.1.3 可保护对象 475

19.1.4 访问级别 475

19.1.5 角色 480

19.1.6 所有权链 482

19.1.7 交叉数据库拥有者链 482

19.1.8 执行环境上下文的

切换 483

19.2 实现安全性 483

19.2.1 身份验证模式的选择 483

19.2.2 管理登录名 484

19.2.3 授予数据库访问权限 486

19.2.4 赋予权限 488

19.3 登录名与用户名的同步 490

19.4 用存储过程、用户自定义

函数和视图管理应用

程序安全 493

19.5 用代理用户管理应用程序

安全 496

19.6 用应用程序角色管理应用

程序安全 496

第20章 Web搜索引擎的

存储过程 499

20.1 环境特征 500

20.2 一个简单的解决方案 500

20.3 缺点 501

20.4 可用的解决方案 502

20.4.1 结果分割 503

20.4.2 快速查询 511

20.4.3 高级查询 515

20.4.4 新的解决方案:行版本 518

第21章 SQL Server环境的

交互作用 525

21.1 运行程序 526

21.2 运行Windows脚本文件 527

21.3 OLE Automation/COM对象

的执行 527

21.4 数据类型转换 530

21.5 运行SQL Server 2005 Intergration

Services(SSIS)包 531

21.6 运行DTS 包 531

21.7 在DTS包中实现循环 532

21.8 与NT注册表交互作用 533

21.8.1 xp_regread 534

21.8.2 xp_regwrite 534

21.9 作业 535

21.9.1 作业管理 535

21.9.2 Job Scheduler的

替换方法 539

21.9.3 维护作业的存储过程 540

21.9.4 操作员和警报 543

21.10 电子邮件 543

21.10.1 Database Mail 544

21.10.2 配置Database Mail 544

21.10.3 发送电子邮件 546

21.10.4 检查状态 547

21.11 将存储过程作为Web服务

提供 547

附录A 命名约定 549

附录B 存储过程编译、存储和

重用 559

附录C SQL Server 2005中

的数据类型 571