本书对SQL Server存储过程程序设计做了全面的概述,并结合具体示例,阐述了这种程序设计理念,给出实际程序设计问题的解决方案。全书分为4部分,共26章。具体而言,除主要对用户定义函数、视图、杀触发器、扩展过程、错误处理、OLE自动化、数据库设计和HTML、XML等做了详细讲解外,还对SQL Server支持的.NET特性进行了介绍。\r\n 本书包含大量的SQL脚本,高质量的范例代码,非常实用,本书适合于数据库开发人员及数据库管理员阅读。
第1部分 基础\r\n\r\n第1章 存储过程初步\r\n\r\n1.1 什么是存储过程\r\n1.2 存储过程的优点\r\n1.3 创建存储过程\r\n1.3.1 滞后名称解析与一个有趣的异常\r\n1.3.2 列表显示一个存储过程\r\n1.3.3 权限与限制\r\n1.3.4 创建忠告\r\n1.4 修改存储过程\r\n1.5 执行存储过程\r\n1.5.1 INSERT与EXEC\r\n1.5.2 执行计划的编译与执行\r\n1.5.3 监视执行\r\n1.5.4 经由远程过程调用(RPC)执行存储过程\r\n1.5.5 临时过程\r\n1.5.6 系统过程\r\n1.5.7 系统对象与系统过程\r\n1.6 扩展的存储过程\r\n1.7 环境问题\r\n1.8 参数\r\n1.8.1 返回状态码\r\n1.8.2 输出参数\r\n1.8.3 列表显示过程参数\r\n1.8.4 通用参数注解\r\n1.8.5 自动变量亦称系统函数\r\n1.9 流程控制语言\r\n1.10 出错\r\n1.10.1 出错消息\r\n1.10.2 RAISERROR\r\n1.11 嵌套\r\n1.12 递归\r\n1.13 小结\r\n\r\n第2章 推荐的约定\r\n\r\n2.1 源代码格式化\r\n2.1.1 大写\r\n2.1.2 缩进与空白\r\n2.1.3 BEGIN/END\r\n2.1.4 圆括号\r\n2.1.5 水平间隔\r\n2.1.6 列与表的别名\r\n2.1.7 DDL\r\n2.1.8 拥有者限定\r\n2.1.9 缩写与可选关键字\r\n2.1.10 参数传递\r\n2.1.11 名称选择\r\n2.2 编码约定\r\n2.2.1 脚本建议\r\n2.2.2 存储过程与函数\r\n2.2.3 表与视图\r\n2.2.4 Transact-SQL\r\n2.3 小结\r\n\r\n第3章 常见设计模式\r\n\r\n3.1 简约原则\r\n3.2 惯例\r\n3.2.1 元数据查询\r\n3.2.2 对象创建\r\n3.2.3 设置数据库上下文\r\n3.2.4 清空表\r\n3.2.5 复制表\r\n3.2.6 变量赋值\r\n3.2.7 循环\r\n3.2.8 空值支持\r\n3.2.9 最顶层行检索\r\n3.3 设计模式\r\n3.3.1 迭代程序\r\n3.3.2 Intersector\r\n3.3.3 Qualifier\r\n3.3.4 Executor\r\n3.3.5 Conveyor\r\n3.3.6 Restorer\r\n3.3.7 原型\r\n3.3.8 Singleton\r\n3.3.9 其他模式\r\n3.4 小结\r\n\r\n第4章 源代码管理\r\n\r\n4.1 源代码管理的好处\r\n4.2 dt过程\r\n4.3 最优实践\r\n4.3.1 在脚本中保存对象\r\n4.3.2 维护分离的脚本\r\n4.3.3 不要使用Unicode\r\n4.3.4 使用标志表示版本\r\n4.3.5 使用关键字给文件签名\r\n4.3.6 除非绝对必须,不要加密\r\n4.4 来自于Query Analyzer的版本控制\r\n4.5 使用版本控制的自动脚本生成\r\n4.5.1 GGSQLBuilder\r\n4.5.2 GGSQLBuilder如何运作\r\n4.5.3 脚本生成工具的优点\r\n4.5.4 GGSQLBuilder如何选择并排列SQL脚本\r\n4.6 小结\r\n\r\n第5章 数据库设计\r\n\r\n5.1 通用方法\r\n5.2 建模工具\r\n5.3 范例项目\r\n5.4 五个过程\r\n5.5 考察五个阶段\r\n5.5.1 分析\r\n5.5.2 设计\r\n5.5.3 构造\r\n5.5.4 数据库开发的复杂性\r\n5.5.5 应用数据库理论\r\n5.5.6 定义应用程序的目标\r\n5.5.7 定义应用程序的功能\r\n5.5.8 设计数据库基础和应用过程\r\n5.6 业务过程建模\r\n5.6.1 开始业务过程建模\r\n5.6.2 增加外部实体\r\n5.6.3 增加过程\r\n5.6.4 增加存储\r\n5.6.5 增加流程对象\r\n5.6.6 增加数据结构\r\n5.7 实体一关系建模\r\n5.7.1 E-R图的类型\r\n5.7.2 E-R建模术语\r\n5.7.3 建立E-R模型\r\n5.7.4 规地化\r\n5.7.5 完成模型\r\n5.8 关系型数据建模\r\n5.8.1 逻辑数据建模术语\r\n5.8.2 从E-R图转向关系模型\r\n5.8.3 构造数据字典\r\n5.8.4 使用数据字典\r\n5.8.5 确定列的大小\r\n5.8.6 设计描述\r\n5.8.7 外部键生成\r\n5.8.8 模型完整性验证\r\n5.8.9 DDL生成\r\n5.8.10 Enterprise Manager的Database Diagrams\r\n5.9 小结\r\n\r\n第6章 数据容量\r\n\r\n6.1 数据生成方法\r\n6.1.1 交叉联接\r\n6.1.2 Random()\r\n6.1.3 Doubling\r\n6.1.4 INSERT…EXEC\r\n6.1.5 sp_generate_test_data\r\n6.2 速度\r\n6.3 小结\r\n\r\n第2部分 目标\r\n\r\n第7章 错误处理\r\n\r\n7.1 错误报告\r\n7.1.1 RAISERROR\r\n7.1.2 xp_logevent\r\n7.2 处理错误\r\n7.2.1 @@ERROR\r\n7.2.2 用户错误\r\n7.2.3 致命错误\r\n7.2.4 看上去怪癖其实不然的问题\r\n7.2.5 @@ROWCOUNT\r\n7.2.6 错误和事务管理\r\n7.2.7 SET XACT_ABORT\r\n7.3 小结\r\n\r\n第8章 触发器\r\n\r\n8.1 决定有什么变化\r\n8.2 管理连续值\r\n8.3 触发器限制\r\n8.4 INSTEAD OF触发器\r\n8.5 触发器和审计\r\n8.6 事务\r\n8.7 执行\r\n8.8 调用存储过程\r\n8.9 嵌套的触发器\r\n8.10 禁用触发器\r\n8.11 最优实践\r\n8.12 小结\r\n\r\n第9章 视图\r\n\r\n9.1 元数据\r\n9.2 约束\r\n9.2.1 ANSI_NULLS和QUOTED_IDENTIFIER\r\n9.2.2 DML约束\r\n9.3 ANSI SQL模式视图\r\n9.3.1 创建自己的INFORMATION SCHEMA视图\r\n9.3.2 创建自己的INFORMATION SCHEMA用户定义函数\r\n9.3.3 从视图调用存储过程\r\n9.4 可更新的视图\r\n9.5 WITH CHECK OPTION子句\r\n9.6 派生表\r\n9.7 参数化视图\r\n9.8 动态视图\r\n9.9 分区视图\r\n9.9.1 BETWEEN和分区视图查询\r\n9.9.2 分布式分区视图\r\n9.10 索引视图\r\n9.10.1 优化程序使用索引视图\r\n9.10.2 在SQL Server的其他版本上使用索引视图\r\n9.11 设计模块化索引视图\r\n9.12 小结\r\n\r\n第10章 用户定义的函数\r\n\r\n10.1 标量函数\r\n10.2 表值函数\r\n10.3 内联函数\r\n10.4 限制\r\n10.5 元数据\r\n10.6 创建用户自己的系统函数\r\n10.7 UDF详尽说明书\r\n10.7.1 改进的SOUNDEX()函数\r\n10.7.2 统计函数\r\n10.7.3 递归\r\n10.7.4 参数化UDF\r\n10.8 小结\r\n\r\n第3部分 HTML、XML和.NET\r\n\r\n第11章 HTML\r\n\r\n11.1 起源\r\n11.2 从Transact-SQL制作HTML\r\n11.2.1 表\r\n11.2.2 列标题\r\n11.3 从sp_makewebtask制作HTML\r\n11.3.1 超链接\r\n11.3.2 模板\r\n11.4 小结\r\n\r\n第12章 XML入门\r\n\r\n12.1 注意\r\n12.2 XML:概观\r\n12.3 HTML:简易的代价\r\n12.4 简史\r\n12.5 XML与HTML比较:一个例子\r\n12.6 文档类型定义\r\n12.7 XML架构\r\n12.8 扩展样式表语言转换\r\n12.9 文档对象模型\r\n12.10 工具\r\n12.11 小结\r\n\r\n第13章 XML和SQL Server:HTTP查询\r\n\r\n13.1 基于HTTP访问SQL Server\r\n13.2 URL查询\r\n13.2.1 特殊字符\r\n13.2.2 样式表\r\n13.2.3 内容类型\r\n13.2.4 非XML结果\r\n13.2.5 存储过程\r\n13.3 模板查询\r\n13.3.1 样式表\r\n13.3.2 在客户上应用样式表\r\n13.3.3 客户端模板\r\n13.4 小结\r\n\r\n第14章 XML和SQL Server:获取数据\r\n\r\n14.1 SELECT…FOR XML\r\n14.2 RAW模式\r\n14.3 AUTO模式\r\n14.4 元素\r\n14.5 EXPLICIT模式\r\n14.5.1 指令\r\n14.5.2 建立数据关系\r\n14.6 映射架构\r\n14.7 小结\r\n\r\n第15章 XML和SQL Server:OPENXML\r\n\r\n15.1 标记参数\r\n15.2 边缘表格式\r\n15.3 用OPENXMLO插入数据\r\n15.4 Web版本1\r\n15.4.1 Updategrams\r\n15.4.2 XML批量加载\r\n15.5 限制\r\n15.5.1 sp_xml_concat\r\n15.5.2 sp_run_xml_proc\r\n15.6 小结\r\n\r\n第16章 .NET和未来革命\r\n\r\n16.1 .NET:应用程序开发的未来\r\n16.2 什么是.NET\r\n16.3 打击Microsoft\r\n16.4 Microsoft偏执\r\n16.5 小结\r\n\r\n第4部分 高级篇\r\n\r\n第17章 性能\r\n\r\n17.1 索引\r\n17.1.1 存储\r\n17.1.2 覆盖索引\r\n17.1.3 性能问题\r\n17.1.4 索引交集\r\n17.1.5 索引碎片\r\n17.1.6 碎片整理\r\n17.1.7 视图和计算列上的索引\r\n17.1.8 前提\r\n17.1.9 锁定和索引\r\n17.2 统计\r\n17.2.1 基数\r\n17.2.2 密度\r\n17.2.3 选择性\r\n17.2.4 性能问题\r\n17.2.5 存储\r\n17.2.6 列统计\r\n17.2.7 列表统计\r\n17.2.8 更新统计\r\n17.2.9 sp_showstatdate\r\n17.3 查询优化\r\n17.3.1 普通计划优化\r\n17.3.2 简化\r\n17.3.3 统计数字加载\r\n17.3.4 基于代价的优化\r\n17.3.5 完全优化\r\n17.3.6 选择性评估\r\n17.3.7 优化搜索参数\r\n17.3.8 联接顺序和类型选择\r\n17.3.9 子查询和联接两者取一\r\n17.3.10 逻辑运算符和物理运算符\r\n17.4 小结\r\n\r\n第18章 调试与配置\r\n\r\n18.1 调试\r\n18.1.1 设置与安全问题\r\n18.1.2 建议与警告\r\n18.1.3 步骤\r\n18.1.4 没有网络的调试\r\n18.1.5 调试触发器和用户定义函数\r\n18.2 配置\r\n18.2.1 开始跟踪\r\n18.2.2 跟踪与查看\r\n18.2.3 命令行参数\r\n18.2.4 一般建议与警告\r\n18.2.5 重放跟踪\r\n18.2.6 加载跟踪文件到表\r\n18.2.7 跟踪文件发布为XML\r\n18.2.8 分组Profiler数据\r\n18.2.9 ODBC跟踪\r\n18.3 应力测试\r\n18.4 小结\r\n\r\n第19章 自动化\r\n\r\n19.1 COM简介\r\n19.1.1 COM之前\r\n19.1.2 COM的曙光\r\n19.1.3 基本体系结构\r\n19.2 SQL Server和COM自动化\r\n19.2.1 sp_OA过程\r\n19.2.2 sp_checkspelling\r\n19.2.3 sp_exportable\r\n19.2.4 sp_importable\r\n19.2.5 sp_getSQLregistry\r\n19.3 小结\r\n\r\n第20章 扩展存储过程\r\n\r\n20.1 开放数据服务\r\n20.1.1 启动代码\r\n20.1.2 扩展过程活动\r\n20.1.3 返回数据\r\n20.2 一个简单的例子\r\n20.3 一个更好的例子\r\n20.4 使扩展过程更容易使用\r\n20.5 调试扩展过程\r\n20.6 隔离扩展过程\r\n20.7 xp_setpriority\r\n20.8 小结\r\n\r\n第21章 管理存储过程\r\n\r\n21.1 sp_readtextfile\r\n21.2 sp_diff\r\n21.3 sp_generate_script\r\n21.4 sp_start_trace\r\n21.5 sp_stop_trace\r\n21.6 sp_list_trace\r\n21.7 sp_proc_runnef\r\n21.8 sp_create_backup_job\r\n21.9 sp_diffdb\r\n21.10 小结\r\n\r\n第22章 非文档化的Transact SQL\r\n\r\n22.1 怎么定义非文档化\r\n22.2 非文档化的过程\r\n22.2.1 sp_checknames[@mode]\r\n22.2.2 sp_delete_backuphistory@oldest_date\r\n22.2.3 sp_enumerrorlogs\r\n22.2.4 sp_enumoledbdatasources\r\n22.2.5 sp_fixindex@dbname,@tabname,@indid\r\n22.2.6 sp_gettypestring@tabid,@colid,@typestring output\r\n22.2.7 sp_MS_marksystemobject@objname\r\n22.2.8 sp_MS_upd_sysobj_category@pSeqMode integer\r\n22.2.9 sp_MSaddguidcol@source_owner,@source_table\r\n22.2.10 sp_MSaddguidindex@source_owner,@source_table\r\n22.2.11 sp_MSaddlogin_implicit_ntlogin@loginname\r\n22.2.12 sp_MSadduser_implicit_ntlogin@ntname\r\n22.2.13 sp_MScheck_uid_owns_anything@uid\r\n22.2.14 sp_MSdbuseraccess@mode=‘perm’|‘db’,@qual=db name mask\r\n22.2.15 sp_MSdbuserpriv@mode=‘perm’|‘serv’|‘ver’|‘role’\r\n22.2.16 sp_MSdependencies@objname,@objtype,@flags int,@objlist\r\n22.2.17 sp_MSdrop_object[@object_id][,@object_name][,@object_owner]\r\n22.2.18 sp_MSexists_file@full_path,@filename\r\n22.2.19 sp_MSforeachdb@command1 @replacechar=‘?’[,@command2][,@command3][,@precommand][,@postcommand]\r\n22.2.20 sp_MSforeachtable @command1 @replacechar=‘?’[,@com mand2][,@command3][,@whereand][,@precommand][,@postc ommand]\r\n22.2.21 sp_MSget_oledbinfo @server[,@infotype][,@login][,@password]\r\n22.2.22 sp_MSget_qualified_name @object_id,@qualified_name OUT\r\n22.2.23 sp_MSget_type @tabid,@colid,@colname OUT,@type OUT\r\n22.2.24 sp_MSguidtostr @guid,@mystr OUT\r\n22.2.25 sp_MShelpindex @tablename[,@indexname][,@flags]\r\n22.2.26 sp_MShelptype[@typename][,@flags=‘sdt’|‘uddt’|NULL]\r\n22.2.27 sp_MSindexspace @tablename[,@index_name]\r\n22.2.28 sp_MSis_pk_col @source_table,@colname,@indid\r\n22.2.29 sp_MSkilldb@dbname\r\n22.2.30 sp_MSloginmappings@loginname\r\n22.2.31 sp_MStable_has_unique_index@tabid\r\n22.2.32 sp_MStablekeys[tablename][,@colname][,@type][,@keyname][,@flags]\r\n22.2.33 sp_MStablerefs@tabname,@type=N'actualtables',@direction=N'primary',@reftable\r\n22.2.34 sp_MStablespace[@name]\r\n22.2.35 sp_MSunc_to_drive@unc_path,@local_server,@local_path OUT\r\n22.2.36 sp_MSuniquecolname table_name,@base_colname,@unique_colname OUT\r\n22.2.37 sp_MSuniquename@seed,@start\r\n22.2.38 sp_MSuniqueobjectname@name_in,@name_out OUT\r\n22.2.39 sp_MSuniquetempname@name_in,@name_out OUT\r\n22.2.40 sp_readerrorlog[@lognum]\r\n22.2.41 sp_remove_tempdb_file@filename\r\n22.2.42 sp_set_local_time[@server_name][,@adjustment_in_minutes](对Win9x)\r\n22.2.43 sp_tempdbspace\r\n22.2.44 xp_dirtree‘rootpath’\r\n22.2.45 xp_dsninfo@systemdsn\r\n22.2.46 xp_enum_oledb_providers\r\n22.2.47 xp_enumdsn\r\n22.2.48 xp_enumerrorlogs\r\n22.2.49 xp_execresultset‘code query’,‘database’\r\n22.2.50 xp_fileexi'st‘filename’\r\n22.2.51 xp_fixeddrives\r\n22.2.52 xp_get_MAPI_default_profile\r\n22.2.53 xp_get_MAPI_profiles\r\n22.2.54 xp_getfiledetails‘filename’\r\n22.2.55 xp_getnetname\r\n22.2.56 xp_oledbinfo@providername,@datasource,@ocation@providerstring,@catalog,@login,@password,@infotype\r\n22.2.57 xp_readerrorlog[lognum][filename]\r\n22.2.58 xp_regenumvalues\r\n22.2.59 xp_regaddmultistr,xp_regdeletekey,xp_regdeletevalue,xp_regread,xp_regremovemultistring,xp_regwrite\r\n22.2.60 xp_subdirs\r\n22.2.61 xp_test_MAPI_profile‘profile’\r\n22.2.62 xp_varbintohexstr\r\n22.3 创建INFORMATION_SCHEMA视图\r\n22.4 创建系统函数\r\n22.5 非文档化的DBCC命令\r\n22.6 非文档化的函数\r\n22.7 非文档化的跟踪标记\r\n22.8 小结\r\n\r\n第23章 数组\r\n\r\n23.1 xp_array.dll\r\n23.1.1 xp_createarray\r\n23.1.2 xp_setarray\r\n23.1.3 xp_getarray\r\n23.1.4 xp_destoryarray\r\n23.1.5 xp_listarray\r\n23.2 数组系统函数\r\n23.3 主要项目\r\n23.4 多维数组\r\n23.5 小结\r\n\r\n第5部分 扩软件工程短评\r\n\r\n第24章 创建可工作的环境\r\n\r\n24.1 摆脱干扰\r\n24.2 关上门\r\n24.3 内部干扰\r\n24.4 形式的作用\r\n24.5 沉默是金:沟通是神圣的\r\n24.6 小结\r\n24.7 结束语\r\n\r\n第25章 进化式开发\r\n\r\n25.1 Kaizen\r\n25.2 小的改变的益处\r\n25.3 软件\r\n25.4 软件熵\r\n25.5 再评估\r\n25.6 对再评估的销售(或人工)管理\r\n25.7 何时不进行再评估\r\n25.8 数据库\r\n25.9 是否可以通过再评估来代替设计\r\n25.10 代码消亡\r\n25.11 极度编程\r\n25.11.1 代码在前,思考在后\r\n25.11.2 补救措施\r\n25.12 小结\r\n25.13 结束语\r\n\r\n第26章 完整测试\r\n\r\n26.1 从哪里开始\r\n26.2 测试的无用性\r\n26.3 测试类型\r\n26.3.1 单元测试\r\n26.3.2 功能测试\r\n26.3.3 逆向测试\r\n26.3.4 集成测试\r\n26.4 测试时机\r\n26.5 测试可以节约时间\r\n26.6 极度编程中的测试\r\n26.7 其他类型的测试\r\n26.7.1 代码检查\r\n26.7.2 代码阅读\r\n26.7.3 检查\r\n26.7.4 遍历\r\n26.8 小结\r\n26.9 结束语