Transact-SQL管理与开发实例精粹


请输入要查询的词条内容:

Transact-SQL管理与开发实例精粹


《Transact-SQL管理与开发实例精粹》将作者10余年从事SQL Server数据库管理和开发经验积累的Transact-SQL综合性实例整理归类并进行剖析。可以帮助读者借鉴和开发出适合自己的Transact-SQL实例,这些实例既可以用于数据库管理,也可以用于数据库系统开发。



图书信息


书名:突出重围:Transact-SQL管理与开发实例精粹作者:赵松涛 等编著

ISBN:978-7-121-11447-2

出版日期:2010年10月

定价:59.00元

开本:16开

页码:460页

宣传语


专业专注,独到独家,深度深入

内 容 简 介


由于Transact-SQL语言良好的传承和继承性,因此,本书的绝大部分代码可以跨越SQL Server版本的限制,在SQL Server 2008、2005甚至2000上都可以使用,即使今后推出的新版本,几乎也不用修改就可以移植使用。本书涉及Transact-SQL使用的各个方面,但又不是联机丛书语法的简单复制,而是侧重于通过实例来学习综合使用Transact-SQL各语法要素完成特定任务的方法。

本书既适合数据库管理人员,也适合开发人员阅读和参考,还可作为大中专院校及各类培训班的教材,极具实用性。

前 言


图书难做,技术类的图书越来越难做,因为网络已经让资料的搜索和盗版几乎没有成本,还缘于社会转型期的喧嚣和浮躁已经让人很难静下心来读书。在接连出版了几本叫好不叫座的数据库图书后,我几乎已经完全丧失了写作的勇气。是郭立主任和她领导的博文视点这个团体给了我勇气和力量,在历经3年的打磨和反复修改的基础上,才有了这本图书的问世。个中辛苦,唯有自知。

从SQL Server 6.5到SQL Server 2008,我一直在学习、研究并使用,10多年的过程中,对其了解和掌握也有一个逐步加深的过程。如果说有什么心得和体会的话,我的理解是Transact-SQL语言应该是SQL Server的核心和精髓,因为不论是管理和开发,最终落脚都是Transact-SQL语言的作用。遗憾的是,大部分学习SQL Server的人员都在简单掌握其图形化管理界面操作后,往往忽略对Transact-SQL的学习和了解。一方面是SQL Server的联机丛书已经做得足够仔细,另外一方面也是因为Transact-SQL的学习没有好的实例和代码可以借鉴。

最近几年,我逐步深入研究SQL Server的核心机制,在此基础上形成了自己的一些研究结论。这本图书就是将自己对Transact-SQL的了解和掌握,以及研究使用的实例代码呈现给读者,绝非对联机丛书的简单雷同使用。因此,本书可以称为是一名数据库技术爱好者的独家秘笈。

原创留口碑,专业出精品。无论是管理还是开发人员,我相信这本书都可以作为您的案头丛书。

踏实做人,用心做事,我相信付出总会有回报。您的批评、建议和反馈就是对我最大的回报。本书中涉及的所有实例源代码进行下载。

本书主要由赵松涛编写,参与编写的还有李翔鹰(第6、11、13章)、余艳、王恩春、赵迎春、赵高飞、卢颖、朱远妮、李黎明、彭兴文、杜从云、朱春凤、邓新华。

感谢郭立女士和她领导的博文视点这个年轻的、充满朝气的团队给予我充分的创作自由并提出了宝贵的意见。

献给所有我的读者家人、父母和读者。

作 者

目 录


第1章 Transact-SQL语法元素 1

1.1 标识符 1

1.1.1 必须有标识符吗 1

1.1.2 标识符的排序规则 1

1.1.3 常规标识符 2

1.1.4 带分隔符的标识符 3

1.2 数据类型 3

1.2.1 哪些对象需要数据类型 3

1.2.2 如何选择恰当的数据类型 4

1.2.3 基本数据类型 5

1.2.4 SQL Server 2008新增数据类型 5

1.2.5 深入研究tinyint数据类型 6

1.2.6 深入研究smallint数据类型 8

1.2.7 深入研究int(Integer)数据类型 10

1.2.8 深入研究bigint数据类型 12

1.2.9 decimal(numeric)数据类型的使用 14

1.2.10 float数据类型的使用 16

1.2.11 real数据类型的使用 17

1.2.12 char数据类型的使用 17

1.2.13 varchar数据类型的使用 17

1.2.14 用CAST函数转换数据类型 18

1.2.15 用CONVERT函数转换数据类型 18

1.3 常量 19

1.3.1 数值型常量的格式 19

1.3.2 字符串型常量的格式 20

1.3.3 日期时间型常量的格式 20

1.4 注释 20

1.4.1 添加单行注释信息 20

1.4.2 添加多行注释信息 20

1.5 变量 21

1.5.1 变量的数据类型 21

1.5.2 变量的分类 21

1.5.3 局部变量的声明 21

1.5.4 局部变量的赋值 22

1.5.5 局部变量的作用域 23

1.6 常用聚合函数 23

1.6.1 计算平均值AVG 23

1.6.2 计算最小值MIN 24

1.6.3 计算最大值MAX 25

1.6.4 计算求和值SUM 26

1.6.5 计算项数值COUNT(COUNT_BIG) 26

1.6.6 计算标准偏差值STDEV 27

1.6.7 计算方差VAR 28

1.7 常用日期时间函数 29

1.7.1 获取当前日期GETDATE 29

1.7.2 获取年度信息YEAR 30

1.7.3 获取月份信息MONTH 30

1.7.4 获取天数信息DAY 30

1.7.5 任意获取日期时间值部分DATEPART 31

1.7.6 日期加法DATEADD 31

1.7.7 日期减法DATEDIFF 32

1.7.8 2008中新增的日期时间型函数 33

1.7.9 判断是否为日期数据ISDATE 33

1.8 常用字符串函数 33

1.8.1 获取字符的ASCII码ASCII 33

1.8.2 获取ASCII码对应的字符CHAR 34

1.8.3 获取字符的Unicode编码UNICODE 35

1.8.4 获取Unicode编码对应的字符NCHAR 36

1.8.5 获取字符串第一次出现位置PATINDEX 36

1.8.6 生成空格字符串SPACE 37

1.8.7 按指定次数重复生成字符串REPLICATE 38

1.8.8 截取子串SUBSTRING 39

1.8.9 获取字符串长度LEN 39

1.8.10 替换字符串中内容STUFF 40

1.8.11 指定位置搜索字符串中内容CHARINDEX 41

1.8.12 生成带分隔符的Unicode字符串QUOTENAME 42

1.8.13 转换浮点数字为字符串STR 42

1.8.14 截取左边字符串LEFT 43

1.8.15 截取右边字符串RIGHT 43

1.8.16 截取左边空格LTRIM 44

1.8.17 截取右边空格RTRIM 44

1.8.18 转换为小写字符串LOWER 45

1.8.19 转换为大写字符串UPPER 45

1.8.20 反序字符串REVERSE 46

1.8.21 获取字符串字节数DATALENGTH 46

1.9 常用文本和图像函数 47

1.9.1 查找特定字符串PATINDEX 47

1.9.2 获取文本指针TEXTPTR 47

1.9.3 检测文本指针是否有效TEXTVALID 49

1.9.4 读取文本图像列内容READTEXT 49

1.9.5 写入文本图像列内容WRITETEXT 50

1.9.6 更新文本图像列内容UPDATETEXT 51

1.10 常用数学函数 52

1.10.1 计算绝对值ABS 52

1.10.2 获取大于等于的最小整数值CEILING 53

1.10.3 获取小于等于的最大整数值FLOOR 53

1.10.4 获取随机数RAND 53

1.10.5 获取指定长度和精度ROUND 54

1.11 常用元数据函数 54

1.11.1 获取数据库标识符DB_ID 54

1.11.2 获取数据库名称DB_NAME 55

1.11.3 获取数据库属性值DATABASEPROPERTYEX 56

1.11.4 获取文件组标识符FILEGROUP_ID 57

1.11.5 获取文件组名称FILEGROUP_NAME 58

1.11.6 获取文件组属性值FILEGROUPPROPERTY 58

1.11.7 获取文件标识符FILE_ID 60

1.11.8 获取文件名称FILE_NAME 61

1.11.9 获取文件属性值FILEPROPERTY 62

1.11.10 获取数据对象标识符OBJECT_ID 63

1.11.11 获取数据对象名称OBJECT_NAME 64

1.11.12 获取文件属性值OBJECTPROPERTYEX 66

1.12 运算符 67

1.12.1 算术运算符 67

1.12.2 位运算符 68

1.12.3 比较运算符 68

1.12.4 逻辑运算符 68

1.12.5 字符串连接运算符 69

1.12.6 赋值运算符 69

1.12.7 运算符的优先级 69

第2章 Transact-SQL语句 70

2.1 控制流语句 70

2.1.1 程序块语句BEGIN..END 70

2.1.2 判断语句IF..ELSE 71

2.1.3 循环语句WHILE 72

2.1.4 分支判断语句CASE 74

2.1.5 无条件退出语句RETURN 75

2.1.6 无条件跳转语句GOTO 77

2.1.7 延期执行语句WAITFOR 78

2.2 运行时生成语句 79

2.2.1 用EXECUTE执行动态命令 80

2.2.2 用SP_EXECUTESQL执行动态命令 81

2.2.3 参数替换 83

2.2.4 为什么提倡使用SP_EXECUTESQL 84

2.2.5 使用输出参数的SP_EXECUTESQL 85

2.3 语句之间数据的传递 86

2.3.1 Transact-SQL语句之间数据的传递 86

2.3.2 Transact-SQL与高级语言之间数据的传递 87

2.4 错误处理 90

2.4.1 SQL Server数据库引擎错误 91

2.4.2 用TRY..CATCH发现错误 91

2.4.3 捕获错误的系统函数 92

2.4.4 用@@ERROR捕获上一条语句的错误 93

2.4.5 用RAISERROR反馈错误 94

2.5 批处理 96

2.5.1 GO的含义 96

2.5.2 研究批处理的执行 96

2.5.3 批处理的意义 99

2.5.4 为什么临时变量作用域不能跨批处理 100

2.5.5 如何编写批处理 101

2.5.6 批处理如何处理错误 101

2.5.7 脚本 102

第3章 查询服务器配置信息 103

3.1 配置查询环境 103

3.2 查询服务器属性值 104

3.2.1 ServerProperty系统函数 104

3.2.2 查询数据库引擎版本 105

3.2.3 综合使用ServerProperty函数查询 105

3.3 判断登录账户身份 106

3.4 读写注册表信息 106

3.4.1 读注册表xp_regenumvalues 107

3.4.2 读注册表xp_regread 107

3.4.3 写注册表xp_regwrite 108

3.4.4 删除注册表项xp_regdeletevalue 108

3.4.5 读注册表项xp_instance_regread 109

3.4.6 写注册表xp_instance_regwrite 109

3.4.7 读注册表中的主要数据文件路径信息 110

3.4.8 读注册表中的错误日志文件路径信息 111

3.4.9 读注册表中的日志文件路径信息 112

3.5 综合实例 113

3.5.1 获取“常规”选项卡信息 113

3.5.2 获取服务器配置参数信息 114

3.5.3 获取服务器上数据库信息 115

3.5.4 获取服务器上处理器数量 115

3.5.5 提升SQL Server服务器优先级 116

3.5.6 获得Windows版本信息 116

3.5.7 获得身份验证机制 117

3.5.8 获得登录审核机制 118

3.5.9 自动检测服务器重要的配置参数 118

3.5.10 查询服务器的用户或用户组 126

3.5.11 查询用户角色或应用程序角色 127

第4章 登录过程 129

4.1 连接 129

4.1.1 查询所有连接信息 129

4.1.2 查询连接总数 130

4.1.3 查询阻塞的连接 130

4.1.4 查询用户建立的连接 130

4.1.5 查询系统建立的连接 130

4.1.6 查询活动的用户连接 131

4.1.7 查询用户连接的不同客户机 131

4.2 配置 131

4.2.1 查询当前系统配置 131

4.2.2 查询当前最大工作线程数 132

4.3 会话 132

4.3.1 查询服务器上的所有会话 132

4.3.2 查询会话建立的游标 132

4.3.3 查询会话的错误信息 133

4.3.4 查询会话的缓冲区命中率 133

4.3.5 查询会话的操作系统线程 134

4.3.6 查询当前会话ID 135

4.4 综合运用 135

4.4.1 综合查询连接统计信息 135

4.4.2 判断当前登录的权限 137

4.4.3 查询会话超时设置 137

4.4.4 判断连接是否为DAC 138

4.4.5 查询当前连接的网络参数 138

4.4.6 查询SQL Server版本信息 139

4.4.7 查询服务器基本属性 139

4.4.8 查询当前登录名 141

4.4.9 查询当前的活动事务数 141

4.4.10 查询数据库缓冲区命中率低的会话 141

4.4.11 查询数据库缓冲区命中率最低的会话的SQL语句 142

第5章 数据库相关 144

5.1 查询数据库信息 144

5.1.1 查询所有的用户数据库名称 144

5.1.2 用sp_dboption存储过程配置数据库 145

5.1.3 配置数据库的恢复模式 145

5.1.4 判断数据库的名称是否含有特定字符 146

5.1.5 判断两个数据库的排序规则是否一致 147

5.1.6 判断数据库是否系统数据库和可读 148

5.1.7 查询可以访问的数据库 148

5.1.8 查询数据库的文件 149

5.1.9 查询数据库的系统表 150

5.1.10 查询数据库的排序规则 151

5.1.11 查询数据库的排序规则Windows代码 152

5.1.12 查询数据库支持的排序规则 152

5.1.13 统计数据库上的进程数 152

5.1.14 查询数据库的兼容性级别 153

5.1.15 查询数据库的最后备份时间 153

5.1.16 查询数据库的最后日志备份时间 153

5.2 数据库的存储空间 154

5.2.1 查询数据库的总空间 154

5.2.2 查询数据库的数据文件总空间 154

5.2.3 查询数据库的日志文件总空间 155

5.2.4 查询数据文件已经分配的空间 155

5.2.5 查询数据文件的可用空间 155

5.2.6 查询日志文件已经分配的空间 157

5.3 综合运用 159

5.3.1 查询数据库的属性 159

5.3.2 获取所有数据库的数据文件空间使用率排序 159

第6章 未公开的DBCC命令 162

6.1 DBCC PAGE查询数据页面 162

6.1.1 查询DBID和DBNAME 163

6.1.2 查询FILENUM和PAGENUM 163

6.1.3 DBCC PAGE的典型用法 163

6.2 DBCC LOG查询日志 164

6.3 DBCC ERRORLOG初始化错误日志 165

6.4 DBCC FLUSHPROCINDB清除缓存存储过程 166

6.5 DBCC BUFFER查询缓冲区 166

6.6 DBCC DBINFO显示数据库结构 167

6.7 DBCC DBTABLE显示数据字典 168

6.8 DBCC IND显示表的索引页面信息 168

6.9 DBCC PRTIPAGE显示索引每行的数据页 169

6.10 DBCC RESOURCE显示服务器资源情况 169

6.11 DBCC DBRECOVER恢复质疑数据库 170

6.12 DBCC CACHESTATS查看内存统计信息 170

6.13 DBCC MEMORYSTATUS查询内存分配 171

6.14 DBCC跟踪标记 171

6.14.1 概念 171

6.14.2 打开跟踪标记 172

6.14.3 关闭跟踪标记 172

6.14.4 查询跟踪标记状态 172

6.15 DBCC SHOWFILESTATS显示数据文件空间 172

6.16 WITH TABLERESULTS表格显示信息 173

6.17 DBCC LOGINFO查询虚拟日志信息 173

6.18 DBCC EXTENTINFO查询盘区数 174

第7章 数据和日志文件 176

7.1 FILEPROPERTY函数获得文件属性 176

7.1.1 判断文件是否只读 176

7.1.2 判断文件是否主要数据文件 177

7.1.3 查询文件已经使用空间 177

7.2 FN_VIRTUALFILESTATS获得文件I/O性能 177

7.2.1 查询指定文件的I/O性能 178

7.2.2 查询指定数据库所有文件的I/O性能 178

7.2.3 查询所有数据库所有文件的I/O性能 179

7.2.4 查询文件I/O性能的动态性能视图 180

7.3 日志文件相关 180

7.2.1 查询VLF分布情况 180

7.2.2 移动日志文件的内容 182

7.2.3 删除日志文件的内容 182

7.4 数据文件相关 183

7.4.1 查询所有数据库的数据文件空间情况 183

7.4.2 查询数据库存储空间的详细分布 185

7.4.3 查询已分配空间中的行内数据 192

7.4.4 查询已分配空间中的LOB大型数据 193

7.4.5 查询已分配空间中的行溢出数据 194

7.4.6 查询哪些类型的对象使用了数据空间 194

7.4.7 查询使用数据空间的对象类型及其数量 194

7.5 综合查询数据库文件的I/O性能 195

第8章 数据对象 197

8.1 索引 197

8.1.1 更新表上所有索引的统计信息 197

8.1.2 更新表上特定索引的统计信息 199

8.1.3 统计数据库中索引使用的空间总和 200

8.1.4 索引使用的空间详细情况 203

8.2 表 208

8.2.1 获得数据库表的存储空间分布 208

8.2.2 获得数据缓冲区中数据对象的存储分布 212

第9章 性能监控 218

9.1 对象分配性能 218

9.1.1 监控盘区分配情况 218

9.1.2 监控盘区回收情况 219

9.1.3 监控页面拆分情况 220

9.1.4 监控表上锁升级情况 221

9.2 内存性能 222

9.2.1 SQL Server内存详解 223

9.2.2 查询SQL Server服务器使用的内存数量 225

9.2.3 查询连接使用的内存数量 225

9.2.4 查询锁使用的内存数量 226

9.2.5 查询优化器使用的内存数量 226

9.2.6 查询SQL使用的内存数量 226

9.2.7 查询服务器能够使用的最大内存数量 227

9.2.8 查询当前服务器上可用内存数量 227

9.2.9 查询最小服务器内存 228

9.2.10 查询最大服务器内存 228

9.2.11 查询计算机的物理内存 229

9.2.12 查询计算机的虚拟内存 229

9.3 过程缓冲区性能 229

9.3.1 查询过程缓冲区使用的内存 229

9.3.2 查询过程缓冲区内容类别 230

9.3.3 查询过程缓冲区命中率 230

9.3.4 查询过程缓冲区对象分布比例 231

9.3.5 查询过程缓冲区中各类对象的命中率 232

9.3.6 查询过程缓冲区各类对象使用的比例 232

9.3.7 清除过程缓冲区中的对象 233

9.3.8 过程缓冲区中消耗资源Top对象 234

9.4 数据缓冲区性能 238

9.4.1 查询数据缓冲区的内存数量 238

9.4.2 查询数据缓冲区的理想内存数量 239

9.4.3 查询数据缓冲区的可用内存数量 239

9.4.4 查询数据缓冲区中数据使用的内存 239

9.4.5 查询数据缓冲区的命中率 240

9.4.6 清除数据缓冲区中的对象 240

9.4.7 数据缓冲区中消耗资源Top对象 241

9.5 其他实例 242

9.5.1 查询资源等待情况 242

9.5.2 查询计数器种类和性能值 243

9.5.3 查询执行计划的属性 244

9.5.4 查询性能计数器表是否可以使用 245

9.5.5 查询服务器内存总体分布情况 245

第10章 管理其他实例 250

10.1 检测和使用XP_CMDSHELL 250

10.1.1 检测XP_CMDSHELL是否启用 250

10.1.2 用XP_CMDSHELL执行命令 253

10.2 错误日志 253

10.2.1 产生并使用新的错误日志文件 253

10.2.2 获得错误日志文件的信息 254

10.3 代理服务 254

10.3.1 判断代理服务是否启动 254

10.3.2 查询代理服务上产生的警报 254

10.3.3 配置代理服务自启动 255

10.3.4 判断代理服务是否允许访问 255

10.3.5 获得代理服务启动信息 256

10.3.6 记录代理服务启动时间 256

10.3.7 获得代理服务子系统的信息 256

10.3.8 获得代理服务详细配置信息 256

10.3.9 运行代理服务监视器 258

10.3.10 刷新代理服务作业 258

10.3.11 查询代理服务活动作业 259

10.4 设置登录环境 259

10.5 数据库 260

10.5.1 产生数据库检查点 260

10.5.2 设置数据库单用户模式 260

10.5.3 分离数据库 260

10.5.4 附加数据库 260

10.5.5 判断指定路径的日志文件是否存在 261

10.5.6 获取主要数据文件中的文件信息 261

10.5.7 获取主要数据文件中的数据库信息 262

10.5.8 获取数据库的用户表信息 263

10.5.9 脱机数据库 264

10.5.10 联机数据库 264

10.5.11 收缩数据库 264

10.5.12 判断用户是否可以访问master数据库 264

10.6 访问注册表 265

10.7 读取硬盘空间信息 266

10.8 判断文件是否存在 266

10.9 存储空间的碎片 266

10.9.1 数据的存储类型 267

10.9.2 数据的存储结构 270

10.9.3 存储空间的碎片类型 270

10.9.4 碎片对数据操作性能的影响 271

10.9.5 dbcc showcontig检测碎片 272

10.9.6 dm_db_index_physical_stats检测碎片 274

10.9.7 消除碎片的方法 277

10.9.8 自动检测当前数据库的碎片 278

10.9.9 自动消除数据库的碎片 283

第11章 数据查询 288

11.1 语法结构 288

11.2 选择列表 289

11.2.1 选择所有列 289

11.2.2 选择特定列 293

11.2.3 包含运算符的查询 295

11.2.4 包含函数的查询 296

11.2.5 消除重复项 297

11.3 FROM子句 298

11.3.1 使用表别名 298

11.3.2 使用表提示 301

11.4 WHERE子句 305

11.4.1 WHERE子句中的运算符 306

11.4.2 比较查询 307

11.4.3 范围查询 308

11.4.4 列表查询 309

11.4.5 模式匹配查询 310

11.5 GROUP BY子句 312

11.5.1 语法结构 312

11.5.2 实例分析 313

11.6 ORDER BY子句 314

11.6.1 语法结构 314

11.6.2 实例分析 315

11.7 HAVING筛选查询 316

11.7.1 HAVING筛选查询的语法结构 316

11.7.2 HAVING筛选查询实例 316

11.8 INTO查询 316

11.8.1 INTO查询的语法结构 316

11.8.2 INTO查询实例 317

11.9 SELECT联结查询 317

11.9.1 SELECT联结查询的语法结构 317

11.9.2 SELECT联结查询的分类 317

11.9.3 笛卡儿积查询 318

11.9.4 等值联结查询 318

11.9.5 自然联结查询 318

11.9.6 自身联结查询 318

11.9.7 内联结查询 319

11.9.8 左外联结查询 319

11.9.9 右外联结查询 320

11.9.10 全外联结查询 320

11.10 SELECT嵌套查询 320

11.10.1 什么是SELECT嵌套查询 320

11.10.2 什么是SELECT嵌套子查询 321

11.10.3 简单嵌套查询 321

11.10.4 in嵌套查询 322

11.10.5 some嵌套查询 322

11.10.6 all嵌套查询 323

11.10.7 exists嵌套查询 324

11.11 操作结果集 324

11.11.1 Union形成并集 324

11.11.2 Except形成差集 325

11.11.3 InterSect形成交集 326

11.11.4 用公用表表达式临时存储结果集 326

第12章 数据操作 328

12.1 INSERT语句研究 328

12.1.1 表结构和索引结构 328

12.1.2 执行前的日志情况分析 329

12.1.3 执行情况分析 329

12.1.4 执行后的日志情况分析 331

12.1.5 研究数据的变化情况 332

12.1.6 研究结论 333

12.2 UPDATE语句研究 334

12.2.1 执行前的日志情况分析 334

12.2.2 执行情况分析 334

12.2.3 执行后的日志情况 335

12.2.4 研究结论 338

12.3 DELETE语句研究 338

12.3.1 执行前的日志情况分析 338

12.3.2 执行情况分析 339

12.3.3 执行后的日志情况 339

12.3.4 研究结论 341

12.4 深入探讨语句内部机制 341

12.4.1 谁先插入数据 342

12.4.2 谁先更新数据 342

12.4.3 谁先删除数据 342

第13章 T-SQL游标 343

13.1 游标概述 343

13.1.1 什么是游标 343

13.1.2 游标的类型 344

13.1.3 默认结果集是如何使用的 344

13.1.4 什么是MARS 345

13.1.5 使用游标还是默认结果集 345

13.1.6 使用服务器游标还是客户机游标 346

13.2 T-SQL游标定义及使用 346

13.2.1 T-SQL游标的生命周期 346

13.2.2 T-SQL游标的声明 347

13.2.3 T-SQL游标的打开 347

13.2.4 T-SQL游标的读取 348

13.2.5 T-SQL游标的关闭 348

13.2.6 T-SQL游标的释放 349

13.2.7 T-SQL游标的综合实例 349

第14章 事务和锁 351

14.1 多用户数据库的并发问题 351

14.1.1 并发访问的实例 351

14.1.2 并发问题 352

14.2 事务 353

14.2.1 事务的特性 353

14.2.2 事务的状态 354

14.3 SQL SERVER中的事务机制 355

14.3.1 事务模式 355

14.3.2 更改事务模式 356

14.3.3 事务的启动 357

14.3.4 事务日志记录 357

14.3.5 事务编程语句 357

14.3.6 事务的调度 358

14.3.7 事务的隔离性级别 358

14.3.8 批(GO) 359

14.4 锁 360

14.4.1 锁的粒度 360

14.4.2 锁的类型(模式) 361

14.4.3 锁持有度 361

14.4.4 动态锁机制 362

14.4.5 查看锁 362

14.5 死锁 363

14.5.1 死锁的发生 364

14.5.2 消除死锁的方法 364

14.5.3 SQL Server 死锁检测和结束机制 365

14.5.4 跟踪和检测死锁 365

第15章 存储过程 367

15.1 存储过程概述 367

15.1.1 从批处理谈起 367

15.1.2 存储过程的引入 368

15.1.3 存储过程是什么 369

15.1.4 可不可以不使用存储过程 370

15.1.5 存储过程的优点 370

15.1.6 T-SQL的注入式攻击与防范 371

15.1.7 用参数化的存储过程防范T-SQL的注入式攻击 372

15.2 存储过程的类型 373

15.2.1 按照定义主体分类 374

15.2.2 按照生命周期分类 374

15.3 T-SQL存储过程的创建 374

15.3.1 创建T-SQL存储过程的规则 374

15.3.2 创建T-SQL存储过程的语法 375

15.3.3 创建无参数T-SQL存储过程 376

15.3.4 创建带输入参数的T-SQL存储过程 377

15.3.5 创建带输出参数的T-SQL存储过程 377

15.4 T-SQL存储过程的执行 378

15.4.1 执行无参数的T-SQL存储过程 379

15.4.2 执行带输入参数的T-SQL存储过程 379

15.4.3 执行带输出参数的T-SQL存储过程 379

15.5 数据操作T-SQL存储过程 380

15.5.1 数据查询 380

15.5.2 数据录入 381

15.5.3 数据删除 381

15.5.4 数据统计和求和 382

15.5.5 数据更新 383

15.5.6 将图像数据存入数据库 385

15.6 数据库操作T-SQL存储过程 387

15.6.1 附加数据库 387

15.6.2 完全备份数据库 387

15.6.3 收缩数据库 388

15.6.4 检查数据库备份 388

15.6.5 删除数据库 389

15.6.6 创建数据库 390

15.7 表操作T-SQL存储过程 391

15.7.1 清除所有表的内容 391

15.7.2 根据需要对表的内容进行处理 391

15.7.3 统计表数据 393

15.7.4 导出表数据为文件 393

15.7.5 导出数据库中特定的表数据为文件 395

15.7.6 导入文本文件到表中 396

15.8 文件操作T-SQL存储过程 397

15.8.1 创建操作系统目录 397

15.8.2 删除操作系统文件 397

15.8.3 判断文件是否存在 398

15.8.4 获得服务器名称 398

15.8.5 统计特定字符串出现的次数 399

15.9 异构数据操作T-SQL存储过程 400

15.9.1 提取Foxpro数据到SQL Server 400

15.9.2 提取Access数据到SQL Server 401

第16章 自定义函数和触发器 402

16.1 自定义函数概述 402

16.1.1 什么是自定义函数 402

16.1.2 自定义函数的优点 404

16.1.3 T-SQL自定义函数的语法 405

16.2 T-SQL自定义函数实例 407

16.2.1 转换Bool型到字符型 407

16.2.2 转换不同的日期表达 407

16.2.3 转换字符串到日期 408

16.3 触发器概述 408

16.3.1 触发器类型 409

16.3.2 触发器的内部实现机制 409

16.3.3 触发器工作原理 409

16.3.4 触发器的使用 410

16.3.5 触发器的创建语法 410

16.4 T-SQL触发器实例 411

16.4.1 自动记录数据库DDL事件的触发器 411

16.4.2 自动更新表数据的触发器 412

16.4.3 不允许删除表数据的触发器 413

16.4.4 不允许某些插入表数据的触发器 413

16.4.5 表上发生更新操作后级联更新其他表的触发器 414

第17章 某项目数据库T-SQL开发实例 416

17.1 特殊的表设计 416

17.1.1 数据库设计历史表DBBuildVersion 416

17.1.2 数据库DDL语句执行情况表DatabaseLog 418

17.1.3 数据库错误信息情况表ErrorLog 419

17.2 特殊的表字段设计 421

17.3 存储过程设计 423

17.3.1 记录数据库错误信息 423

17.3.2 显示数据库错误信息 424

17.3.3 返回服务器时间 425

17.3.4 根据需要备份数据库 425

17.3.5 录入图书数据 428

17.3.6 更新图书数据 430

17.3.7 检索图书数据 431

17.3.8 删除图书数据 431

17.4 触发器设计 432

17.4.1 自动更新表的ModifiedDate字段 432

17.4.2 自动记录数据库DDL语句 433

17.5 自定义函数设计 434

17.5.1 获得两个日期之间的年份数 434

17.5.2 获得图书的折扣价 435

17.5.3 获得价格区间的图书信息 435