OBJECT_ID(‘Sales.MyView‘, ‘V‘) IS NOT NULL DROP VIEW Sales.MyView;CREATE VIEW Sales.MyViewASSELECT YEAR(orderdate) AS orderyear, COUNT(*) AS numordersFROM Sales.OrdersGROUP BY YEAR(orderdate);GO
应该改为:
IF OBJECT_ID(‘Sales.MyView‘, ‘V‘) IS NOT NULL DROP VIEW Sales.MyView;GOCREATE VIEW Sales.MyViewASSELECT YEAR(orderdate) AS orderyear, COUNT(*) AS numordersFROM Sales.OrdersGROUP BY YEAR(orderdate);GO
GO n 选项,n表示批处理需要执行的次数,比如:
INSERT INTO dbo.T1 DEFAULT VALUES;GO 100游标
基本代码:
DECLARE @custid AS INT, @prvcustid AS INT, @ordermonth DATETIME, @qty AS INT, @runqty AS INT;DECLARE C CURSOR FAST_FORWARD /* read only, forward only */ FOR SELECT custid, ordermonth, qty FROM Sales.CustOrders ORDER BY custid, ordermonth;OPEN CFETCH NEXT FROM C INTO @custid, @ordermonth, @qty;SELECT @prvcustid = @custid, @runqty = 0;WHILE @@FETCH_STATUS = 0BEGIN IF @custid <> @prvcustid SELECT @prvcustid = @custid, @runqty = 0; SET @runqty = @runqty + @qty; INSERT INTO @Result VALUES(@custid, @ordermonth, @qty, @runqty); FETCH NEXT FROM C INTO @custid, @ordermonth, @qty;ENDCLOSE C;DEALLOCATE C;临时表
局部临时表,在命名时以单个#作为前缀,例如#T1。全局临时表,在命名时用两个#作为前缀,如##T1。
动态SQLDECLARE @sql AS NVARCHAR(100);SET @sql = N‘SELECT orderid, custid, empid, orderdateFROM Sales.OrdersWHERE orderid = @orderid;‘;EXEC sp_executesql @stmt = @sql, @params = N‘@orderid AS INT‘, @orderid = 10248;GO
带有输出参数的sp_executesql,
DECLARE @Counts TABLE( schemaname sysname NOT NULL, tablename sysname NOT NULL, numrows INT NOT NULL, PRIMARY KEY(schemaname, tablename));DECLARE @sql AS NVARCHAR(350), @schemaname AS sysname, @tablename AS sysname, @numrows AS INT;DECLARE C CURSOR FAST_FORWARD FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES;OPEN CFETCH NEXT FROM C INTO @schemaname, @tablename;WHILE @@fetch_status = 0BEGIN SET @sql = N‘SET @n = (SELECT COUNT(*) FROM ‘ + QUOTENAME(@schemaname) + N‘.‘ + QUOTENAME(@tablename) + N‘);‘; EXEC sp_executesql @stmt = @sql, @params = N‘@n AS INT OUTPUT‘, @n = @numrows OUTPUT; INSERT INTO @Counts(schemaname, tablename, numrows) VALUES(@schemaname, @tablename, @numrows); FETCH NEXT FROM C INTO @schemaname, @tablename;ENDCLOSE C;DEALLOCATE C;SELECT schemaname, tablename, numrowsFROM @Counts;GO
在PIVOT中使用动态SQL。先看静态的PIVOT SQL:
SELECT *FROM (SELECT shipperid, YEAR(orderdate) AS orderyear, freight FROM Sales.Orders) AS D PIVOT(SUM(freight) FOR orderyear IN([2006],[2007],[2008])) AS P;
动态的SQL如下:
DECLARE @sql AS NVARCHAR(1000), @orderyear AS INT, @first AS INT;DECLARE C CURSOR FAST_FORWARD FOR SELECT DISTINCT(YEAR(orderdate)) AS orderyear FROM Sales.Orders ORDER BY orderyear;SET @first = 1;SET @sql = N‘SELECT *FROM (SELECT shipperid, YEAR(orderdate) AS orderyear, freight FROM Sales.Orders) AS D PIVOT(SUM(freight) FOR orderyear IN(‘;OPEN CFETCH NEXT FROM C INTO @orderyear;WHILE @@fetch_status = 0BEGIN IF @first = 0 SET @sql = @sql + N‘,‘ ELSE SET @first = 0; SET @sql = @sql + QUOTENAME(@orderyear); FETCH NEXT FROM C INTO @orderyear;ENDCLOSE C;DEALLOCATE C;SET @sql = @sql + N‘)) AS P;‘;EXEC sp_executesql @stmt = @sql;GO例程
SQL Server支持三种例程:用户定义函数、存储过程、触发器。
存储过程:
USE TSQLFundamentals2008;IF OBJECT_ID(‘Sales.usp_GetCustomerOrders‘, ‘P‘) IS NOT NULL DROP PROC Sales.usp_GetCustomerOrders;GOCREATE PROC Sales.usp_GetCustomerOrders @custid AS INT, @fromdate AS DATETIME = ‘19000101‘, @todate AS DATETIME = ‘99991231‘, @numrows AS INT OUTPUTASSET NOCOUNT ON;SELECT orderid, custid, empid, orderdateFROM Sales.OrdersWHERE custid = @custid AND orderdate >= @fromdate AND orderdate < @todate;SET @numrows = @@rowcount;GODECLARE @rc AS INT;EXEC Sales.usp_GetCustomerOrders @custid = 1, -- Also try with 100 @fromdate = ‘20070101‘, @todate = ‘20080101‘, @numrows = @rc OUTPUT;SELECT @rc AS numrows;GO
触发器:
CREATE TRIGGER trg_T1_insert_audit ON dbo.T1 AFTER INSERTASSET NOCOUNT ON;INSERT INTO dbo.T1_Audit(keycol, datacol) SELECT keycol, datacol FROM inserted;GO错误处理
基本代码:
BEGIN TRY PRINT 10/2; PRINT ‘No error‘;END TRYBEGIN CATCH PRINT ‘Error‘;END CATCHGO
下面是一个封装了错误处理代码的存储过程:
IF OBJECT_ID(‘dbo.usp_err_messages‘, ‘P‘) IS NOT NULL DROP PROC dbo.usp_err_messages;GOCREATE PROC dbo.usp_err_messagesASSET NOCOUNT ON;IF ERROR_NUMBER() = 2627BEGIN PRINT ‘Handling PK violation...‘;ENDELSE IF ERROR_NUMBER() = 547BEGIN PRINT ‘Handling CHECK/FK constraint violation...‘;ENDELSE IF ERROR_NUMBER() = 515BEGIN PRINT ‘Handling NULL violation...‘;ENDELSE IF ERROR_NUMBER() = 245BEGIN PRINT ‘Handling conversion error...‘;ENDELSEBEGIN PRINT ‘Handling unknown error...‘;ENDPRINT ‘Error Number : ‘ + CAST(ERROR_NUMBER() AS VARCHAR(10));PRINT ‘Error Message : ‘ + ERROR_MESSAGE();PRINT ‘Error Severity: ‘ + CAST(ERROR_SEVERITY() AS VARCHAR(10));PRINT ‘Error State : ‘ + CAST(ERROR_STATE() AS VARCHAR(10));PRINT ‘Error Line : ‘ + CAST(ERROR_LINE() AS VARCHAR(10));PRINT ‘Error Proc : ‘ + COALESCE(ERROR_PROCEDURE(), ‘Not within proc‘);GO
笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-10 可编程对象
标签:
小编还为您整理了以下内容,可能对您也有帮助:
零基础学习SQL server有什么书籍推荐5
推荐《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》,Itzik Ben-Gan著,成保栋、张昱译,电子工业出版社出版。
适合零基础的人学习T-SQL。看完以后,还可以看该系列的后两本《Microsoft SQL Server 2008技术内幕:T-SQL查询》和《Inside Microsoft SQL Server 2008 T-SQL Programming》。三本都看完基本就是大侠了。
这三本在网上都有PDF下载。
零基础学习SQL server有什么书籍推荐5
推荐《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》,Itzik Ben-Gan著,成保栋、张昱译,电子工业出版社出版。
适合零基础的人学习T-SQL。看完以后,还可以看该系列的后两本《Microsoft SQL Server 2008技术内幕:T-SQL查询》和《Inside Microsoft SQL Server 2008 T-SQL Programming》。三本都看完基本就是大侠了。
这三本在网上都有PDF下载。
学sql server数据库用什么书好?主要是存储过程方面的。
建议还是从基础开始学起吧。
给你推荐3本书:
《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》
《Microsoft SQL Server 2008技术内幕:T-SQL查询》
《SQL Server 2008编程入门经典(第3版)》
宝典系统的也不错。
贯通SQLServer2008数据库系统开发的目 录
第 1 篇 基础知识篇
第1章 SQL Server 2008概述、安装和配置 2
1.1 SQL Server 2008概述 2
1.1.1 数据库引擎 3
1.1.2 分析服务 3
1.1.3 集成服务 3
1.1.4 复制 4
1.1.5 报表服务 4
1.1.6 通知服务 4
1.1.7 全文搜索 5
1.1.8 Service Broker 5
1.2 选择SQL Server 2008的优势 5
1.3 安装SQL Server 2008软、硬件要求 6
1.4 安装示例 7
1.5 服务器网络配置 13
1.5.1 SQL Server配置管理器 13
1.5.2 配置服务器网络协议和网络库 14
1.5.3 加密与SQL Server的连接 14
1.6 客户端网络配置 16
1.6.1 本地客户端配置 17
1.6.2 使用防火墙系统 20
1.7 小结 23
第2章 SQL Server 2008新增及加强功能介绍 24
2.1 新增及加强功能简介 24
2.2 安全方面 25
2.2.1 加密 25
2.2.2 审计 26
2.3 管理方面 26
2.3.1 数据压缩 26
2.3.2 资源管理器 26
2.3.3 管理非结构化数据 27
2.4 开发方面 27
2.4.1 一次性插入多行数据 27
2.4.2 FORCESEEK提示 27
2.4.3 GROUPING SETS 28
2.4.4 兼容性级别 28
2.4.5 用户自定义表数据类型 29
2.4.6 表值参数 29
2.4.7 MERGE语句 30
2.5 新的数据类型 31
2.6 安装 34
2.7 系统效能方面 34
2.8 其他增强 34
2.8.1 报表服务的新功能 34
2.8.2 服务器合并解决方案 35
2.8.3 与Microsoft Office 2007结合 36
2.8.4 SQL Server集成服务 36
2.8.5 SQL Server分析服务 36
2.9 小结 36
第3章 SQL Server管理工具集 37
3.1 SQL Server管理工具集简介 37
3.2 功能组件和工具窗口介绍 39
3.3 使用SQL Server管理工具集管理服务器 44
3.4 使用SQL Server管理工具集编写、分析和编辑脚本 45
3.5 使用SQL Server管理工具集模板 52
3.6 在SQL Server管理工具集中开发解决方案和项目 55
3.7 SQL Server管理工具集与其他组件协同工作 61
3.8 小结 61
第4章 数据库和规范式 62
4.1 概述 62
4.2 数据库的物理存储结构设计和逻辑结构设计 64
4.2.1 数据库物理存储结构设计 64
4.2.2 数据库逻辑结构设计 69
4.3 创建数据库 73
4.4 删除数据库 76
4.5 修改数据库 78
4.5.1 修改数据库的名称 78
4.5.2 更改数据库所有者 78
4.6 数据库设计规范式 79
4.7 系统数据库 82
4.8 小结 85
第5章 表 86
5.1 概述 86
5.2 表的结构 86
5.3 创建表 87
5.3.1 字段 89
5.3.2 数据类型 89
5.3.3 表设计 93
5.3.4 全局唯一标识符与自动编号字段 93
5.3.5 用户定义数据类型 95
5.3.6 创建计算字段 96
5.4 修改数据记录 97
5.5 更改表设计 98
5.6 删除表 102
5.7 表的连接 103
5.8 表的其他操作 106
5.8.1 表的导入 106
5.8.2 锁定表的某些记录 109
5.9 小结 111
第6章 索引 112
6.1 概述 112
6.2 索引的基本概念 113
6.2.1 索引的结构 113
6.2.2 索引的优点和缺点 113
6.3 索引的设计准则 113
6.4 索引的类型 115
6.4.1 聚集索引与非聚集索引 115
6.4.2 唯一索引与非唯一索引 118
6.4.3 单列索引与多列索引 119
6.5 填充因子 119
6.6 创建索引 120
6.7 禁用索引 125
6.8 删除索引 128
6.9 小结 132
第7章 视图 133
7.1 视图概述 133
7.1.1 视图的优点 134
7.1.2 视图的类型 134
7.2 创建视图 135
7.2.1 创建视图的准则 135
7.2.2 创建视图的方法 136
7.3 使用视图 141
7.3.1 使用索引视图 141
7.3.2 使用分区视图 145
7.4 可更新的视图 147
7.5 通过视图来更新数据 148
7.6 更改视图 151
7.6.1 更改视图的名称 152
7.6.2 更改视图的定义 152
7.7 删除视图 154
7.8 小结 154
第8章 数据库的备份、还原和维护 155
8.1 概述 155
8.2 备份数据库 156
8.2.1 备份概述 156
8.2.2 完全备份 158
8.2.3 差异备份 161
8.2.4 使用事务日志备份 163
8.2.5 将数据库迁移到其他系统进行备份 164
8.2.6 导入/导出 165
8.3 还原和恢复数据库 168
8.3.1 还原方案 168
8.3.2 解决孤立用户 169
8.3.3 还原差异数据库备份 170
8.3.4 还原事务日志备份 174
8.3.5 完全恢复 178
8.3.6 大容量日志记录恢复 179
8.4 备份和恢复系统数据库 180
8.4.1 备份系统数据库 180
8.4.2 还原系统数据库 181
8.5 附加和分离数据库 182
8.5.1 分离数据库 182
8.5.2 附加数据库 185
8.5.3 使用分离和附加操作来移动数据库 187
8.6 复制 187
8.6.1 复制类型概述 188
8.6.2 执行复制 189
8.7 维护计划和策略 195
8.7.1 维护计划概述 195
8.7.2 如何创建维护计划 196
8.8 小结 198
第9章 存储过程 199
9.1 存储过程概述 199
9.1.1 存储过程的优缺点 199
9.1.2 存储过程的种类 200
9.2 创建存储过程 201
9.2.1 创建自定义存储过程时的一些注意事项 201
9.2.2 创建用户自定义存储过程 201
9.2.3 扩展存储过程 203
9.2.4 存储过程表达式语法解析 203
9.2.5 参数 211
9.2.6 游标 211
9.2.7 嵌套存储过程 213
9.2.8 在存储过程中使用数据库事务处理 215
9.3 执行存储过程 215
9.3.1 在SQL Server中执行存储过程 215
9.3.2 在Java/JSP中调用存储过程 216
9.4 更新存储过程 216
9.4.1 重命名存储过程 216
9.4.2 修改存储过程 217
9.4.3 重新编译存储过程 219
9.5 删除存储过程 219
9.6 系统存储过程 221
9.7 优化存储过程 222
9.8 存储过程分页 222
9.9 项目示例:企业员工考勤查询系统 226
9.10 小结 232
第10章 T-SQL基础 233
10.1 概述 233
10.1.1 T-SQL语言的特点 233
10.1.2 T-SQL语言类型 234
10.2 数据类型 234
10.3 关系代数 236
10.4 T-SQL基本语法约定 240
10.5 变量 240
10.6 运算符 243
10.7 函数 245
10.8 控制流程语句 253
10.9 小结 258
第11章 高级T-SQL 259
11.1 概述 259
11.2 脚本与批处理 259
11.2.1 使用INSERT...SELECT进行批处理添加 259
11.2.2 使用INSERT TOP进行批处理添加 261
11.2.3 使用SELECT...INTO进行批处理添加 261
11.3 添加存储过程的查询结果 262
11.4 使用UPDATE TOP修改数据记录 263
11.5 删除数据记录 264
11.5.1 使用DELETE TOP删除数据记录 264
11.5.2 使用带OUTPUT子句的DELETE删除数据记录 264
11.5.3 使用TRUNCATE TABLE表达式删除数据记录 265
11.6 汇总和分组数据 266
11.6.1 使用GROUP BY 266
11.6.2 使用COMPUTE BY 268
11.7 模糊查询 270
11.8 使用T-SQL代码进行全文索引 271
11.9 小结 284
第12章 触发器 285
12.1 概述 285
12.2 创建触发器 287
12.3 修改触发器 290
12.3.1 查看触发器 290
12.3.2 修改触发器的定义 292
12.3.3 重命名触发器 292
12.4 禁用与启用触发器 293
12.5 删除触发器 293
12.6 嵌套触发器 294
12.7 递归触发器 297
12.8 使用触发器 298
12.8.1 使用触发器概述 298
12.8.2 检查特定的字段是否已被修改 299
12.8.3 使用包含ROLLBACK TRANSACTION
表达式的触发器 300
12.8.4 有条件的INSERT触发器 301
12.8.5 指定AFTER触发器的顺序 301
12.8.6 使用INSTEAD OF触发器更新视图 304
12.8.7 使用TRY...CATCH表达式 306
12.8.8 使用sp_addmessage创建用户定义错误消息 309
12.9 DDL触发器、DML触发器和CLR触发器 309
12.9.1 DDL触发器 309
12.9.2 DML触发器 314
12.9.3 CLR触发器 315
12.10 实例:员工就餐统计系统 317
12.11 小结 324
第13章 作业和警报 325
13.1 概述 325
13.2 创建作业 325
13.3 管理作业 329
13.3.1 修改作业 329
13.3.2 运行作业 332
13.3.3 禁用作业 333
13.3.4 停止作业 334
13.3.5 删除作业 335
13.4 作业响应 336
13.5 警报 338
13.5.1 创建事件警报 338
13.5.2 创建性能警报 340
13.5.3 编辑警报 341
13.5.4 删除警报 343
13.6 操作员 343
13.6.1 创建操作员 343
13.6.2 向操作员分配警报 345
13.6.3 修改操作员 346
13.6.4 删除操作员 348
13.7 为作业通知和警报配置SQL Server Agent Mail 348
13.8 诊断及解决作业和警报故障 349
13.9 实例:企业巡更考勤系统 350
13.10 小结 352
第14章 安全 353
14.1 概述 353
14.2 身份验证 354
14.2.1 身份验证模式概述 354
14.2.2 身份验证模式的更改 354
14.3 安全管理 355
14.3.1 SQL Server登录管理 356
14.3.2 数据库角色管理 360
14.3.3 权限管理 361
14.3.4 应用程序角色管理 365
14.3.5 事务日志管理 366
14.4 访问管理 367
14.4.1 启用Guest用户 368
14.4.2 拒绝用户访问 368
14.4.3 管理对数据库的访问 370
14.4.4 对数据库访问进行授权 372
14.4.5 管理对表和列的访问 373
14.5 数据文件安全 375
14.6 安全配置 377
安全配置策略 377
14.7 加密 380
14.8 小结 384
第15章 SQL Server报表服务 385
15.1 SQL Server报表服务概述 385
15.2 报表服务体系架构 386
15.3 报表服务功能 388
15.4 安装SQL Server报表服务 390
15.5 配置报表服务 394
15.6 创建和设计报表 399
15.7 部署报表服务 402
15.7.1 报表服务的部署模式 402
15.7.2 报表服务部署计划 404
15.7.3 复制报表服务器环境 406
15.8 访问报表 407
15.9 发布报表 408
15.10 管理报表服务 411
15.10.1 管理报表服务的要求 411
15.10.2 报表服务器管理工具 411
15.10.3 报表服务安装的备份和还原 413
15.10.4 报表服务器数据库 414
15.11 小结 416
第16章 商业智能开发套件 417
16.1 概述 417
16.2 BIDS图形界面介绍 417
16.2.1 起始页 418
16.2.2 BIDS主界面 418
16.2.3 菜单 419
16.2.4 自定义环境、工具和窗口 421
16.3 生成BI解决方案 423
16.4 设计、开发和调试SQL Server Integration Services包 426
16.5 小结 436
第17章 分析服务 437
17.1 概述 437
17.2 *数据 437
17.3 数据挖掘 438
17.4 使用分析服务 440
17.5 小结 456
第18章 集成服务 457
18.1 概述 457
18.2 复制和下载文件 459
18.2.1 FTP任务 460
18.2.2 文件系统任务 463
18.3 发送电子邮件以响应事件 467
18.4 管理SQL Server对象和数据 472
18.5 小结 476
第19章 性能工具 477
19.1 概述 477
19.2 数据库引擎优化顾问 477
19.2.1 数据库引擎优化顾问图形用户界面(GUI)程序 478
19.2.2 dta实用工具 484
19.3 SQL Server事件探查器(SQL Server Profiler) 489
19.3.1 SQL跟踪 489
19.3.2 使用SQL Server事件探查器 490
19.4 小结 495
第20章 配置工具 496
20.1 概述 496
20.2 报表服务配置管理器 496
20.3 SQL Server配置管理器 498
20.4 SQL Server错误和使用情况报告 500
20.5 SQL Server安装中心 501
20.6 小结 502
第 2 篇 交互提高篇
第21章 提高查询性能 504
21.1 概述 504
21.2 建立索引以快速执行查询 504
21.3 用“数据库引擎优化顾问”来优化查询 509
21.4 其他提高查询性能方法 513
21.5 小结 514
第22章 访问SQL Server 2008 516
22.1 配置服务器 516
22.2 访问SQL Server 519
22.3 远程访问 522
22.4 局域网中多个SQL Server 2008互联同步数据 524
22.5 项目实例:服务部就餐统计系统 526
22.6 小结 532
第23章 SQL Server 2008与Office 2007集成 533
23.1 概述 533
23.2 SQL Server与Excel的集成 533
23.2.1 在Excel中使用SQL Server的数据 533
23.2.2 Excel数据转入到SQL Server 536
23.3 SQL Server 2008数据挖掘外接程序 541
23.3.1 Excel表分析工具 542
23.3.2 Excel数据挖掘客户端 550
23.3.3 数据挖掘Visio模板 556
23.4 使用SQL Server 2008和Office 2007
构造OLAP报表应用 561
23.5 小结 564
第24章 Java与SQL Server 565
24.1 概述 565
24.2 使用JDBC与SQL Server进行交互 565
24.3 使用ODBC与SQL Server进行交互 567
24.4 项目实例:数字化图书管理系统 571
24.5 小结 579
第 3 篇 项目实战篇
第25章 完整项目实例 581
25.1 概述 581
25.2 企业巡更考勤系统(B/S) 581
25.3 数字化图书管理系统(C/S与B/S结合) 598
25.4 小结 620
实例目录
例2-1 一次插入多行数据 27
例2-2 FORCESEEK提示 28
例2-3 使用CREATE TYPE语句创建用户自定义表数据类型 29
例2-4 使用表值参数 29
例2-5 使用MERGE在一张表上执行更新和删除操作 31
例2-6 新数据类型1 31
例2-7 新数据类型2 32
例2-8 新数据类型3 32
例2-9 设置系统数据类型 datetime2 32
例2-10 控制数据类型的精度 33
例2-11 新数据类型4 33
例2-12 经理和雇员之间的父子关系 33
例3-1 缩进代码 49
例3-2 查找特定部分顺序的存储过程 53
例3-3 使用自定义模板 54
例3-4 确定结束日期早于开始日期的工作订单 59
例4-1 创建未指定文件的数据库 75
例4-2 创建指定数据和事务日志文件的数据库 76
例4-3 删除单个数据库 77
例4-4 删除多个数据库 77
例4-5 删除数据库快照 77
例4-6 修改数据库名 78
例4-7 修改数据库所有者 79
例4-8 重建系统数据库 85
例8-1 备份到磁盘设备 159
例8-2 创建完整备份和差异备份 162
例8-3 数据合并 166
例8-4 通过OPENDATASOURCE查询表t1 166
例8-5 通过OPENROWSET查询表t1 166
例8-6 使用bcp 167
例8-7 通过SQL执行bcp 167
例8-8 数据转换 167
例8-9 查找孤立用户 170
例8-10 将用户名对应的登录名添加到syslogins中 170
例8-11 将用户名映射为指定的登录名 170
例8-12 解决dbo为孤立用户的情况 170
例8-13 还原数据库及差异数据库备份 173
例8-14 还原数据库及其差异数据库和事务日志备份 173
例8-15 事务日志还原到某个标记处 177
例8-16 还原完整数据库 179
例8-17 分离数据库1 183
例8-18 分离数据库2 183
例8-19 打开数据库主密钥 185
例8-20 对主密钥启用自动加密 185
例9-1 判断存储过程是否存在 201
例9-2 创建存储过程 202
例9-3 带有复杂SELECT语句的简单过程 205
例9-4 带有参数的简单过程 206
例9-5 带有通配符参数的简单过程 207
例9-6 使用OUTPUT参数的过程 208
例9-7 使用OUTPUT游标参数的过程 209
例9-8 使用WITH RECOMPILE选项的过程 210
例9-9 使用WITH ENCRYPTION选项过程 210
例9-10 创建带参数的储存过程 211
例9-11 在存储过程中使用游标 212
例9-12 在JSP中调用存储过程 216
例9-13 重命名存储过程 217
例9-14 修改存储过程test 218
例9-15 在Database Engine Query中删除存储过程 220
例9-16 删除扩展存储过程 220
例9-18 staffQuery.jsp 227
例9-19 创建存储过程kqOnDutyReport1 229
例9-20 创建存储过程SelectCDate1 230
例12-1 发送通知邮件 288
例12-2 INSTEAD OF触发器 288
例12-3 触发器中IF UPDATE应用 288
例12-4 虚拟表inserted和deleted 288
例12-5 创建触发器 289
例12-6 更新t2表中的数据 290
例12-7 查询某个数据库中的所有触发器 290
例12-8 使用SQL 语句查看触发器tg_sum的内容 291
例12-9 修改触发器的内容 292
例12-10 修改触发器名 293
例12-11 禁用触发器tg_sum 293
例12-12 删除触发器 294
例12-13 创建操作记录表 295
例12-14 在数据表上创建触发器 295
例12-15 创建类别表 295
例12-16 在类别表上创建触发器 296
例12-17 检测表t的第二列和第三列是否被修改过 299
例12-18 触发器回滚 300
例12-19 触发器回滚 301
例12-20 触发器回滚 301
例12-21 有条件的INSERT触发器 301
例12-22 创建proct_Insert触发器 302
例12-23 创建proct_Insert1触发器 302
例12-24 改变触发器次序 303
例12-25 使用Instead Of触发器 305
例12-26 包含错误处理函数的存储过程 307
例12-27 CATCH块捕捉错误 308
例12-28 TRY CATCH构造处理错误 308
例12-29 创建用户定义消息 309
例12-30 调用定义的错误消息 309
例12-31 创建用于保护数据库中的数据表不被修改和删除的存储过程 312
例12-32 创建用于保护当前SQL Server服务器里所有数据库不能被删除
的存储过程 312
例12-33 创建用来记录数据库修改状态的触发器 313
例12-34 判断库存数量是否为0 315
例12-35 使用inserted表 316
例12-36 员工就餐统计系统 317
例13-1 添加一个没有功能的作业 328
例13-2 添加一个具有寻呼、电子邮件和网络发送信息的作业 328
例13-3 修改作业 329
例13-5 更改原来存在的作业步骤 330
例13-6 删除原先存在的作业步骤 331
例13-7 从作业中删除关联服务器 331
例13-8 将作业指派给本地服务器 331
例13-9 将作业指派给不同的服务器 332
例13-10 启动作业 333
例13-11 更改作业的名称 334
例13-12 停止一个作业 335
例13-13 删除一个作业 336
例13-14 为警报添加电子邮件通知 337
例13-15 创建事件警报 340
例13-16 编辑警报 342
例13-17 删除警报 343
例13-18 设置操作员信息 345
例13-19 修改操作员信息 347
例13-20 删除操作员 348
例13-21 企业巡更考勤系统 350
例14-1 创建登录ID和默认数据库 358
例14-2 创建使用其他默认语言的登录ID 358
例14-3 创建带有特定SID的登录ID 358
例14-4 删除登录 358
例14-5 将Windows NT用户设定为SQL Server登录者 358
例14-6 拒绝Windows NT用户登录到SQL Server 359
例14-7 删除Windows NT用户的登录信息 359
例14-8 显示登录信息 360
例14-9 将用户添加到固定服务器角色中 361
例14-10 创建应用程序角色 365
例14-11 删除数据库中的应用程序角色 365
例14-12 修改应用程序角色的密码 366
例14-13 启用Guest用户 368
例14-14 启用/禁用登录名 368
例14-15 检查被禁用的登录名 368
例14-16 删除登录名 370
例14-17 创建数据库角色并添加用户 370
例14-18 判断当前用户 371
例14-19 删除用户及角色 371
例14-20 为数据库用户授予某种权限 371
例14-21 创建数据库用户 372
例14-22 撤销用户授权 372
例14-24 授予用户对表的操作权限 373
例14-25 收回赋予给某个用户的权限 374
例14-26 拒绝用户访问 374
例14-27 授予权限 374
例14-29 产生数据库主密钥 381
例14-30 产生密钥 382
例14-31 加密数据 382
例14-32 数据解密 383
例14-33 用RC4算法产生对称密钥 383
例15-1 报表服务器的URL示例 396
例22-1 查询当前连接所使用的协议 521
例22-2 使用连接字符串连接SQL Server 522
例22-3 创建一个链接服务器 526
例22-4 服务部就餐统计系统 526
例24-1 使用JDBC连接MS SQL Server 566
例24-2 使用ODBC数据源连接MS SQL Server 571
例24-3 数字化图书管理系统 571
例25-1 企业巡更考勤系统(B/S) 581
例25-2 数字化图书管理系统(C/S与B/S结合) 598
贯通SQLServer2008数据库系统开发的目 录
第 1 篇 基础知识篇
第1章 SQL Server 2008概述、安装和配置 2
1.1 SQL Server 2008概述 2
1.1.1 数据库引擎 3
1.1.2 分析服务 3
1.1.3 集成服务 3
1.1.4 复制 4
1.1.5 报表服务 4
1.1.6 通知服务 4
1.1.7 全文搜索 5
1.1.8 Service Broker 5
1.2 选择SQL Server 2008的优势 5
1.3 安装SQL Server 2008软、硬件要求 6
1.4 安装示例 7
1.5 服务器网络配置 13
1.5.1 SQL Server配置管理器 13
1.5.2 配置服务器网络协议和网络库 14
1.5.3 加密与SQL Server的连接 14
1.6 客户端网络配置 16
1.6.1 本地客户端配置 17
1.6.2 使用防火墙系统 20
1.7 小结 23
第2章 SQL Server 2008新增及加强功能介绍 24
2.1 新增及加强功能简介 24
2.2 安全方面 25
2.2.1 加密 25
2.2.2 审计 26
2.3 管理方面 26
2.3.1 数据压缩 26
2.3.2 资源管理器 26
2.3.3 管理非结构化数据 27
2.4 开发方面 27
2.4.1 一次性插入多行数据 27
2.4.2 FORCESEEK提示 27
2.4.3 GROUPING SETS 28
2.4.4 兼容性级别 28
2.4.5 用户自定义表数据类型 29
2.4.6 表值参数 29
2.4.7 MERGE语句 30
2.5 新的数据类型 31
2.6 安装 34
2.7 系统效能方面 34
2.8 其他增强 34
2.8.1 报表服务的新功能 34
2.8.2 服务器合并解决方案 35
2.8.3 与Microsoft Office 2007结合 36
2.8.4 SQL Server集成服务 36
2.8.5 SQL Server分析服务 36
2.9 小结 36
第3章 SQL Server管理工具集 37
3.1 SQL Server管理工具集简介 37
3.2 功能组件和工具窗口介绍 39
3.3 使用SQL Server管理工具集管理服务器 44
3.4 使用SQL Server管理工具集编写、分析和编辑脚本 45
3.5 使用SQL Server管理工具集模板 52
3.6 在SQL Server管理工具集中开发解决方案和项目 55
3.7 SQL Server管理工具集与其他组件协同工作 61
3.8 小结 61
第4章 数据库和规范式 62
4.1 概述 62
4.2 数据库的物理存储结构设计和逻辑结构设计 64
4.2.1 数据库物理存储结构设计 64
4.2.2 数据库逻辑结构设计 69
4.3 创建数据库 73
4.4 删除数据库 76
4.5 修改数据库 78
4.5.1 修改数据库的名称 78
4.5.2 更改数据库所有者 78
4.6 数据库设计规范式 79
4.7 系统数据库 82
4.8 小结 85
第5章 表 86
5.1 概述 86
5.2 表的结构 86
5.3 创建表 87
5.3.1 字段 89
5.3.2 数据类型 89
5.3.3 表设计 93
5.3.4 全局唯一标识符与自动编号字段 93
5.3.5 用户定义数据类型 95
5.3.6 创建计算字段 96
5.4 修改数据记录 97
5.5 更改表设计 98
5.6 删除表 102
5.7 表的连接 103
5.8 表的其他操作 106
5.8.1 表的导入 106
5.8.2 锁定表的某些记录 109
5.9 小结 111
第6章 索引 112
6.1 概述 112
6.2 索引的基本概念 113
6.2.1 索引的结构 113
6.2.2 索引的优点和缺点 113
6.3 索引的设计准则 113
6.4 索引的类型 115
6.4.1 聚集索引与非聚集索引 115
6.4.2 唯一索引与非唯一索引 118
6.4.3 单列索引与多列索引 119
6.5 填充因子 119
6.6 创建索引 120
6.7 禁用索引 125
6.8 删除索引 128
6.9 小结 132
第7章 视图 133
7.1 视图概述 133
7.1.1 视图的优点 134
7.1.2 视图的类型 134
7.2 创建视图 135
7.2.1 创建视图的准则 135
7.2.2 创建视图的方法 136
7.3 使用视图 141
7.3.1 使用索引视图 141
7.3.2 使用分区视图 145
7.4 可更新的视图 147
7.5 通过视图来更新数据 148
7.6 更改视图 151
7.6.1 更改视图的名称 152
7.6.2 更改视图的定义 152
7.7 删除视图 154
7.8 小结 154
第8章 数据库的备份、还原和维护 155
8.1 概述 155
8.2 备份数据库 156
8.2.1 备份概述 156
8.2.2 完全备份 158
8.2.3 差异备份 161
8.2.4 使用事务日志备份 163
8.2.5 将数据库迁移到其他系统进行备份 164
8.2.6 导入/导出 165
8.3 还原和恢复数据库 168
8.3.1 还原方案 168
8.3.2 解决孤立用户 169
8.3.3 还原差异数据库备份 170
8.3.4 还原事务日志备份 174
8.3.5 完全恢复 178
8.3.6 大容量日志记录恢复 179
8.4 备份和恢复系统数据库 180
8.4.1 备份系统数据库 180
8.4.2 还原系统数据库 181
8.5 附加和分离数据库 182
8.5.1 分离数据库 182
8.5.2 附加数据库 185
8.5.3 使用分离和附加操作来移动数据库 187
8.6 复制 187
8.6.1 复制类型概述 188
8.6.2 执行复制 189
8.7 维护计划和策略 195
8.7.1 维护计划概述 195
8.7.2 如何创建维护计划 196
8.8 小结 198
第9章 存储过程 199
9.1 存储过程概述 199
9.1.1 存储过程的优缺点 199
9.1.2 存储过程的种类 200
9.2 创建存储过程 201
9.2.1 创建自定义存储过程时的一些注意事项 201
9.2.2 创建用户自定义存储过程 201
9.2.3 扩展存储过程 203
9.2.4 存储过程表达式语法解析 203
9.2.5 参数 211
9.2.6 游标 211
9.2.7 嵌套存储过程 213
9.2.8 在存储过程中使用数据库事务处理 215
9.3 执行存储过程 215
9.3.1 在SQL Server中执行存储过程 215
9.3.2 在Java/JSP中调用存储过程 216
9.4 更新存储过程 216
9.4.1 重命名存储过程 216
9.4.2 修改存储过程 217
9.4.3 重新编译存储过程 219
9.5 删除存储过程 219
9.6 系统存储过程 221
9.7 优化存储过程 222
9.8 存储过程分页 222
9.9 项目示例:企业员工考勤查询系统 226
9.10 小结 232
第10章 T-SQL基础 233
10.1 概述 233
10.1.1 T-SQL语言的特点 233
10.1.2 T-SQL语言类型 234
10.2 数据类型 234
10.3 关系代数 236
10.4 T-SQL基本语法约定 240
10.5 变量 240
10.6 运算符 243
10.7 函数 245
10.8 控制流程语句 253
10.9 小结 258
第11章 高级T-SQL 259
11.1 概述 259
11.2 脚本与批处理 259
11.2.1 使用INSERT...SELECT进行批处理添加 259
11.2.2 使用INSERT TOP进行批处理添加 261
11.2.3 使用SELECT...INTO进行批处理添加 261
11.3 添加存储过程的查询结果 262
11.4 使用UPDATE TOP修改数据记录 263
11.5 删除数据记录 264
11.5.1 使用DELETE TOP删除数据记录 264
11.5.2 使用带OUTPUT子句的DELETE删除数据记录 264
11.5.3 使用TRUNCATE TABLE表达式删除数据记录 265
11.6 汇总和分组数据 266
11.6.1 使用GROUP BY 266
11.6.2 使用COMPUTE BY 268
11.7 模糊查询 270
11.8 使用T-SQL代码进行全文索引 271
11.9 小结 284
第12章 触发器 285
12.1 概述 285
12.2 创建触发器 287
12.3 修改触发器 290
12.3.1 查看触发器 290
12.3.2 修改触发器的定义 292
12.3.3 重命名触发器 292
12.4 禁用与启用触发器 293
12.5 删除触发器 293
12.6 嵌套触发器 294
12.7 递归触发器 297
12.8 使用触发器 298
12.8.1 使用触发器概述 298
12.8.2 检查特定的字段是否已被修改 299
12.8.3 使用包含ROLLBACK TRANSACTION
表达式的触发器 300
12.8.4 有条件的INSERT触发器 301
12.8.5 指定AFTER触发器的顺序 301
12.8.6 使用INSTEAD OF触发器更新视图 304
12.8.7 使用TRY...CATCH表达式 306
12.8.8 使用sp_addmessage创建用户定义错误消息 309
12.9 DDL触发器、DML触发器和CLR触发器 309
12.9.1 DDL触发器 309
12.9.2 DML触发器 314
12.9.3 CLR触发器 315
12.10 实例:员工就餐统计系统 317
12.11 小结 324
第13章 作业和警报 325
13.1 概述 325
13.2 创建作业 325
13.3 管理作业 329
13.3.1 修改作业 329
13.3.2 运行作业 332
13.3.3 禁用作业 333
13.3.4 停止作业 334
13.3.5 删除作业 335
13.4 作业响应 336
13.5 警报 338
13.5.1 创建事件警报 338
13.5.2 创建性能警报 340
13.5.3 编辑警报 341
13.5.4 删除警报 343
13.6 操作员 343
13.6.1 创建操作员 343
13.6.2 向操作员分配警报 345
13.6.3 修改操作员 346
13.6.4 删除操作员 348
13.7 为作业通知和警报配置SQL Server Agent Mail 348
13.8 诊断及解决作业和警报故障 349
13.9 实例:企业巡更考勤系统 350
13.10 小结 352
第14章 安全 353
14.1 概述 353
14.2 身份验证 354
14.2.1 身份验证模式概述 354
14.2.2 身份验证模式的更改 354
14.3 安全管理 355
14.3.1 SQL Server登录管理 356
14.3.2 数据库角色管理 360
14.3.3 权限管理 361
14.3.4 应用程序角色管理 365
14.3.5 事务日志管理 366
14.4 访问管理 367
14.4.1 启用Guest用户 368
14.4.2 拒绝用户访问 368
14.4.3 管理对数据库的访问 370
14.4.4 对数据库访问进行授权 372
14.4.5 管理对表和列的访问 373
14.5 数据文件安全 375
14.6 安全配置 377
安全配置策略 377
14.7 加密 380
14.8 小结 384
第15章 SQL Server报表服务 385
15.1 SQL Server报表服务概述 385
15.2 报表服务体系架构 386
15.3 报表服务功能 388
15.4 安装SQL Server报表服务 390
15.5 配置报表服务 394
15.6 创建和设计报表 399
15.7 部署报表服务 402
15.7.1 报表服务的部署模式 402
15.7.2 报表服务部署计划 404
15.7.3 复制报表服务器环境 406
15.8 访问报表 407
15.9 发布报表 408
15.10 管理报表服务 411
15.10.1 管理报表服务的要求 411
15.10.2 报表服务器管理工具 411
15.10.3 报表服务安装的备份和还原 413
15.10.4 报表服务器数据库 414
15.11 小结 416
第16章 商业智能开发套件 417
16.1 概述 417
16.2 BIDS图形界面介绍 417
16.2.1 起始页 418
16.2.2 BIDS主界面 418
16.2.3 菜单 419
16.2.4 自定义环境、工具和窗口 421
16.3 生成BI解决方案 423
16.4 设计、开发和调试SQL Server Integration Services包 426
16.5 小结 436
第17章 分析服务 437
17.1 概述 437
17.2 *数据 437
17.3 数据挖掘 438
17.4 使用分析服务 440
17.5 小结 456
第18章 集成服务 457
18.1 概述 457
18.2 复制和下载文件 459
18.2.1 FTP任务 460
18.2.2 文件系统任务 463
18.3 发送电子邮件以响应事件 467
18.4 管理SQL Server对象和数据 472
18.5 小结 476
第19章 性能工具 477
19.1 概述 477
19.2 数据库引擎优化顾问 477
19.2.1 数据库引擎优化顾问图形用户界面(GUI)程序 478
19.2.2 dta实用工具 484
19.3 SQL Server事件探查器(SQL Server Profiler) 489
19.3.1 SQL跟踪 489
19.3.2 使用SQL Server事件探查器 490
19.4 小结 495
第20章 配置工具 496
20.1 概述 496
20.2 报表服务配置管理器 496
20.3 SQL Server配置管理器 498
20.4 SQL Server错误和使用情况报告 500
20.5 SQL Server安装中心 501
20.6 小结 502
第 2 篇 交互提高篇
第21章 提高查询性能 504
21.1 概述 504
21.2 建立索引以快速执行查询 504
21.3 用“数据库引擎优化顾问”来优化查询 509
21.4 其他提高查询性能方法 513
21.5 小结 514
第22章 访问SQL Server 2008 516
22.1 配置服务器 516
22.2 访问SQL Server 519
22.3 远程访问 522
22.4 局域网中多个SQL Server 2008互联同步数据 524
22.5 项目实例:服务部就餐统计系统 526
22.6 小结 532
第23章 SQL Server 2008与Office 2007集成 533
23.1 概述 533
23.2 SQL Server与Excel的集成 533
23.2.1 在Excel中使用SQL Server的数据 533
23.2.2 Excel数据转入到SQL Server 536
23.3 SQL Server 2008数据挖掘外接程序 541
23.3.1 Excel表分析工具 542
23.3.2 Excel数据挖掘客户端 550
23.3.3 数据挖掘Visio模板 556
23.4 使用SQL Server 2008和Office 2007
构造OLAP报表应用 561
23.5 小结 564
第24章 Java与SQL Server 565
24.1 概述 565
24.2 使用JDBC与SQL Server进行交互 565
24.3 使用ODBC与SQL Server进行交互 567
24.4 项目实例:数字化图书管理系统 571
24.5 小结 579
第 3 篇 项目实战篇
第25章 完整项目实例 581
25.1 概述 581
25.2 企业巡更考勤系统(B/S) 581
25.3 数字化图书管理系统(C/S与B/S结合) 598
25.4 小结 620
实例目录
例2-1 一次插入多行数据 27
例2-2 FORCESEEK提示 28
例2-3 使用CREATE TYPE语句创建用户自定义表数据类型 29
例2-4 使用表值参数 29
例2-5 使用MERGE在一张表上执行更新和删除操作 31
例2-6 新数据类型1 31
例2-7 新数据类型2 32
例2-8 新数据类型3 32
例2-9 设置系统数据类型 datetime2 32
例2-10 控制数据类型的精度 33
例2-11 新数据类型4 33
例2-12 经理和雇员之间的父子关系 33
例3-1 缩进代码 49
例3-2 查找特定部分顺序的存储过程 53
例3-3 使用自定义模板 54
例3-4 确定结束日期早于开始日期的工作订单 59
例4-1 创建未指定文件的数据库 75
例4-2 创建指定数据和事务日志文件的数据库 76
例4-3 删除单个数据库 77
例4-4 删除多个数据库 77
例4-5 删除数据库快照 77
例4-6 修改数据库名 78
例4-7 修改数据库所有者 79
例4-8 重建系统数据库 85
例8-1 备份到磁盘设备 159
例8-2 创建完整备份和差异备份 162
例8-3 数据合并 166
例8-4 通过OPENDATASOURCE查询表t1 166
例8-5 通过OPENROWSET查询表t1 166
例8-6 使用bcp 167
例8-7 通过SQL执行bcp 167
例8-8 数据转换 167
例8-9 查找孤立用户 170
例8-10 将用户名对应的登录名添加到syslogins中 170
例8-11 将用户名映射为指定的登录名 170
例8-12 解决dbo为孤立用户的情况 170
例8-13 还原数据库及差异数据库备份 173
例8-14 还原数据库及其差异数据库和事务日志备份 173
例8-15 事务日志还原到某个标记处 177
例8-16 还原完整数据库 179
例8-17 分离数据库1 183
例8-18 分离数据库2 183
例8-19 打开数据库主密钥 185
例8-20 对主密钥启用自动加密 185
例9-1 判断存储过程是否存在 201
例9-2 创建存储过程 202
例9-3 带有复杂SELECT语句的简单过程 205
例9-4 带有参数的简单过程 206
例9-5 带有通配符参数的简单过程 207
例9-6 使用OUTPUT参数的过程 208
例9-7 使用OUTPUT游标参数的过程 209
例9-8 使用WITH RECOMPILE选项的过程 210
例9-9 使用WITH ENCRYPTION选项过程 210
例9-10 创建带参数的储存过程 211
例9-11 在存储过程中使用游标 212
例9-12 在JSP中调用存储过程 216
例9-13 重命名存储过程 217
例9-14 修改存储过程test 218
例9-15 在Database Engine Query中删除存储过程 220
例9-16 删除扩展存储过程 220
例9-18 staffQuery.jsp 227
例9-19 创建存储过程kqOnDutyReport1 229
例9-20 创建存储过程SelectCDate1 230
例12-1 发送通知邮件 288
例12-2 INSTEAD OF触发器 288
例12-3 触发器中IF UPDATE应用 288
例12-4 虚拟表inserted和deleted 288
例12-5 创建触发器 289
例12-6 更新t2表中的数据 290
例12-7 查询某个数据库中的所有触发器 290
例12-8 使用SQL 语句查看触发器tg_sum的内容 291
例12-9 修改触发器的内容 292
例12-10 修改触发器名 293
例12-11 禁用触发器tg_sum 293
例12-12 删除触发器 294
例12-13 创建操作记录表 295
例12-14 在数据表上创建触发器 295
例12-15 创建类别表 295
例12-16 在类别表上创建触发器 296
例12-17 检测表t的第二列和第三列是否被修改过 299
例12-18 触发器回滚 300
例12-19 触发器回滚 301
例12-20 触发器回滚 301
例12-21 有条件的INSERT触发器 301
例12-22 创建proct_Insert触发器 302
例12-23 创建proct_Insert1触发器 302
例12-24 改变触发器次序 303
例12-25 使用Instead Of触发器 305
例12-26 包含错误处理函数的存储过程 307
例12-27 CATCH块捕捉错误 308
例12-28 TRY CATCH构造处理错误 308
例12-29 创建用户定义消息 309
例12-30 调用定义的错误消息 309
例12-31 创建用于保护数据库中的数据表不被修改和删除的存储过程 312
例12-32 创建用于保护当前SQL Server服务器里所有数据库不能被删除
的存储过程 312
例12-33 创建用来记录数据库修改状态的触发器 313
例12-34 判断库存数量是否为0 315
例12-35 使用inserted表 316
例12-36 员工就餐统计系统 317
例13-1 添加一个没有功能的作业 328
例13-2 添加一个具有寻呼、电子邮件和网络发送信息的作业 328
例13-3 修改作业 329
例13-5 更改原来存在的作业步骤 330
例13-6 删除原先存在的作业步骤 331
例13-7 从作业中删除关联服务器 331
例13-8 将作业指派给本地服务器 331
例13-9 将作业指派给不同的服务器 332
例13-10 启动作业 333
例13-11 更改作业的名称 334
例13-12 停止一个作业 335
例13-13 删除一个作业 336
例13-14 为警报添加电子邮件通知 337
例13-15 创建事件警报 340
例13-16 编辑警报 342
例13-17 删除警报 343
例13-18 设置操作员信息 345
例13-19 修改操作员信息 347
例13-20 删除操作员 348
例13-21 企业巡更考勤系统 350
例14-1 创建登录ID和默认数据库 358
例14-2 创建使用其他默认语言的登录ID 358
例14-3 创建带有特定SID的登录ID 358
例14-4 删除登录 358
例14-5 将Windows NT用户设定为SQL Server登录者 358
例14-6 拒绝Windows NT用户登录到SQL Server 359
例14-7 删除Windows NT用户的登录信息 359
例14-8 显示登录信息 360
例14-9 将用户添加到固定服务器角色中 361
例14-10 创建应用程序角色 365
例14-11 删除数据库中的应用程序角色 365
例14-12 修改应用程序角色的密码 366
例14-13 启用Guest用户 368
例14-14 启用/禁用登录名 368
例14-15 检查被禁用的登录名 368
例14-16 删除登录名 370
例14-17 创建数据库角色并添加用户 370
例14-18 判断当前用户 371
例14-19 删除用户及角色 371
例14-20 为数据库用户授予某种权限 371
例14-21 创建数据库用户 372
例14-22 撤销用户授权 372
例14-24 授予用户对表的操作权限 373
例14-25 收回赋予给某个用户的权限 374
例14-26 拒绝用户访问 374
例14-27 授予权限 374
例14-29 产生数据库主密钥 381
例14-30 产生密钥 382
例14-31 加密数据 382
例14-32 数据解密 383
例14-33 用RC4算法产生对称密钥 383
例15-1 报表服务器的URL示例 396
例22-1 查询当前连接所使用的协议 521
例22-2 使用连接字符串连接SQL Server 522
例22-3 创建一个链接服务器 526
例22-4 服务部就餐统计系统 526
例24-1 使用JDBC连接MS SQL Server 566
例24-2 使用ODBC数据源连接MS SQL Server 571
例24-3 数字化图书管理系统 571
例25-1 企业巡更考勤系统(B/S) 581
例25-2 数字化图书管理系统(C/S与B/S结合) 598
求:正版|Microsoft SQL Server 2008技术内幕:T-SQL语言基础 这本书的正版卖地址,一定要正版的
这本书确实是一本好书,看了好几遍了,每次看完都有收获,纸本书好像真的没有卖,当当我也看了,缺货了,不知道你有没有pdf版的,没有的话我有共享,地址如下:
请简单介绍sql语句的基本格式
下列语句部分是Mssql语句,不可以在access中使用。
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,简要介绍基础语句:
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
--A:
create table tab_new like tab_old --(使用旧表创建新表)
--B:
create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键:
Alter table tabname add primary key(col)
说明:删除主键:
Alter table tabname drop primary key(col)
8、说明:创建索引:
create [unique] index idxname on tabname(col….)
删除索引:
drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:
create view viewname as select statement
删除视图:
drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
其次,大家来看一些不错的sql语句
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 这里是执行脚本 ...
end if
objRec.MoveNext
Wend
这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?
采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
再谈随机数
现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。
为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"
注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
随机读取若干条记录,测试过
Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 Order By rand() Limit n
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 用...代替过长的字符串显示
语法:
SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
Conn.Execute说明
Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。