adventureworks2008(关于AdventureWorks2008)
一、SQLServer2008基础教程的目录
第1章SQLServer2008概述和安装
1.1为什么选择SQLServer2008
1.2SQLServer的发展
1.3硬件要求
1.3.1CPU
1.3.2内存
1.3.3硬盘空间
1.3.4操作系统要求
1.4示例
1.5安装
1.5.1开始安装
1.5.2选择要安装的功能
1.5.3为实例命名
1.5.4选择服务账户
1.5.5选择身份验证模式
1.5.6确定数据目录的位置
1.5.7创建报表服务数据库
1.5.8配置错误和使用情况报告
1.6安全性
1.6.1服务账户
1.6.2身份验证模式
1.6.3sa登录
1.7小结
第2章SSMS
2.1SSMS概览
2.2SSMS的选项
2.2.1“环境”节点
2.2.2“源代码管理”节点
2.2.3“文本编辑器”节点
2.2.4“查询执行”节点
2.2.5“查询结果”节点
2.3查询编辑器
2.4小结
第3章设计和创建数据库
3.1数据库的定义
3.2SQLServer中的预建数据库
3.2.1master.
3.2.2tempdb
3.2.3mode1
3.2.4mSdb
3.2.5AdventureWorkS/Adventure-WorksDW
3.3选择数据库系统类型
3.3.1OLTP
3.3.2OLAP
3.3.3示例系统类型选择
3.4收集数据
3.5确定要存储在数据库中的信息
3.5.1金融产品
3.5.2客户
3.5.3客户地址
3.5.4股票
3.5.5交易
3.6外部信息和忽略的信息
3.7建立关系
3.7.1使用键
3.7.2创建关系
3.7.3关于外键的更多信息
3.8规范化
3.8.1每一个实体都应该有唯一的标识符
3.8.2只存储与实体直接有关的信息
3.8.3避免重复值或重复列
3.8.4范式
3.8.5非规范化
3.9创建示例数据库
3.9.1在SSMS中创建数据库
3.9.2在SSMS中删除数据库
3.9.3在查询编辑器中创建数据库一
3.10小结
第4章安全和遵从规范
4.1登录名
4.2服务器登录名和数据库用户
4.3角色
4.3.1固定服务器角色
4.3.2数据库角色
4.3.3应用程序角色
4.4架构
4.5在解决方案中进行下去之前
4.6陈述式管理框架
4.7小结
第5章定义表
5.1什么是表
5.2SQLServer数据类型
5.2.1表中的数据类型
5.2.2程序中的数据类型
5.3列不仅仅是简单的数据存储库
5.3.1默认值
5.3.2生成IDENTIIY值
5.3.3NULL值的使用
5‘3.4为什么要定义允许NULL值的列
5.4在SQLServer中存储图像和大型文本
5.5在SSMSq户创建表
5.6通过查询编辑器创建表
5.7创建表:使用模板
5.8创建模板和修改模板
5.9ALTERTABLE语句
5.10定义其余的表
5.11设置主键
5.12创建关系
5.12.1在创建时检查现有数据
5.12.2强制外键约束
5.12.3选择删除/更新规则
5.13通过T-SQL语句建立关系
5.14小结
第6章创建索引和数据库关系图
6.1什么是索引
6.1.1索引类型
6.1.2唯一性
6.2确定是什么创建了好的索引
6.2.1使用低维护列
6.2.2主键和外键
6.2.3找到指定记录
6.2.4使用覆盖索引
6.2.5查找信息范围
6.2.6保持数据的排序
6.3确定是什么导致了坏的索引
6.3.1使用了不合适的列
6.3.2选择了不合适的数据
6.3.3包含了过多的列
6.3.4表中包含的记录过少
6.4针对性能对索引进行审查
6.5创建索引
6.5.1用表设计器创建索引
6.5.2索引和统计信息
6.5.3CREATEINDEX语法
6.5.4在查询编辑器中创建索引:模板
6.5.5在查询编辑器中创建索引:SQL代码
6.6删除索引
6.7在查询编辑器中修改索引
6.8当索引不存在时
6.9为数据库生成关系图
6.9.1数据库关系图基础
6.9.2SQLServer数据库关系图工具
6.9.3默认的数据库关系图
6.9.4数据库关系图工具条
6.10小结
第7章数据库的备份、还原和维护
7.1事务日志
7.2备份策略
7.3当可能发生错误时
7.4让数据库脱机
7.5备份数据
7.5.1使用T-SQL备份数据库
7.5.2使用T.SQL进行日志备份
7.6还原数据库
7.6.1使用SSMS还原数据
7.6.2使用T-SQL进行还原
7.7分离和附加数据库
7.7.1使用SSMS进行分离和附加操作
7.7.2使用T.SQL进行分离和附加操作
7.8为数据库生成SQL脚本
7.9维护数据库
7.10创建数据库维护计划
7.11设置数据库邮件
7.12修改维护计划
7.13小结
第8章操作数据
8.1T-SQL的INSERT命令的语法
8.2SQL命令INSERT
8.2.1默认值
8.2.2使用NULL值
8.3DBCCCHECKIDENT
8.4列约束
8.5同时插入多条记录
8.6检索数据
8.7使用SSMS检索数据
8.8SELECT语句
8.9指定列
8.10第一批搜索
8.1l改变输出的显示
8.1.2限制搜索:NLIERE的使用
8.12.1SETROWCOUNTn
8.12.2TOPn
8.12.3TOPnPERCENT
8.13字符串函数
8.14顺序!顺序!
8.15LIKE运算符
8.16生成数据:SEL.ECTINT
8.17谁能添加、删除或选取数据
8.18更新数据
8.18.1JJPDAT命令
8.18.2在查询编辑器中更新数据
8.19事务
8.19.1BEGINTRAN
8.19.2COMMI:TTRAN
8.19.3ROLLBACKTRAN
8.19.4锁定数据
8.19.5更新数据:使用事务
8.19.6嵌套事务
8.20删除数据
8.20.1DFLETE的语法
8.20.2使用DELETE语句
8.21截断表(删除表中的所有行)
8.22删除表
8.23小结
第9章构建视图
9.1为什么要构建视图
9.2针对安全而使用查询
9.3加密视图定义
9.4创建视图:SSMS、
9.5使用视图来创建视图
9.6CREATEVIEW语法
9.7创建视图:查询编辑器窗格
9.8创建视图:SCFIEMABINDING
9.9为视图设置索引
9.10小结.
第10章存储过程和函数
10.1什么是存储过程.
10.2CREATPROCEDURE语法
10.3返回一系列记录
10.4创建存储过程:SSMS
10.5执行存储过程的不同方法
10.5.1不使用EXEC
10.5.2使用EXEC
10.6使用RETURN
10.7控制流程
10.7.1IFELSE
10.7.2BEGINEND
10.7.3NHILEBREAK语句
10.7.4CASF吾句
10.8综合应用
10.9用户定义函数.
10.9.1标量函数
10.9.2表值函数
10.9,3创建用户定义函数时要考虑的事项
10.10小结
第11章T-SQL基础
11.1使用多个表
11.2变量
11.3临时表
11.4聚合
11.4.1COUNT/COUNT_BIG
11.4.2SUH
11.4.3MAX/MIN
11.4.4AVG
11.5分组数据
11.6HAVINC
11.7独特值
11.8函数
11.8.1日期和时间函数
11.8.2字符串函数
11.8.3系统函数
11.9RAISTRROR
11.10错误处理
11.11@@ERROR
11.12TRYCATCH
11.13小结
第12章高级T-SQL
12.1子查询
12.1.1IN
12.1.2ExISTs
12.1.3了结未了之事
12.2APPLY运算符
12.2.1CROssAPPLY
12.2.2OUTERAPPI-Y
12.3公用表表达式
12.4透视数据
12.4.1PIVOT
12.4.2LINPIVOT
12.5排名函数
12.5.1ROWNUMBER
12.5.2RANK
12.5.3DENSERANK
12.5.4NTILE
12.6SQLServer中的PowerShell
12.7小结
第13章触发器
13.1什么是触发器
13.2DML触发器.
13.3针对DML触发器的CREATETRIGGFR语法
13.4为什么不使用约束
13.5对逻辑表进行删除和插入
13.6创建DMLFOR触发器
13.7检查特定的列
13.7.1使用UPDATE()
13.7.2使用COLUJMNS_JPDATED
13.8DDL触发器
13.8.1DDL_OATABAS_LFVELEVENT5
13.8.2删除DDL触发器
13.8.3EVENTDAT()
13.9小结
第14章SQLServer2008ReponingServices
14.1ReportingServices的架构
14.2配置ReportingServices
14.3使用报表设计器构建第一个报表
14.4.小结
二、ASP.NET 2.0:AdventureWorks系统分析
ASP NET AdventureWorks贸易系统分析
AdventureWorks贸易系统是一个使用N层架构和ASP NET技术创建的Web站点该站点实现了贸易系统的部分功能在实现过程中重点使用了一些集成可重用组件这应该是大家阅读的重点所在本系列文章包括篇第一篇简单介绍一下系统概况和数据库设计第二篇讲解数据访问层的实现第三篇说明构建Web站点的方法通过这些内容读者将学习和实践多方面的知识例如N层架构应用使用数据访问应用程序块创建数据访问层使用泛型集合实现数据绑定使用企业库的异常处理块统一处理异常母版页应用等等
业务过程
AdventureWorks贸易系统实现了贸易系统的部分功能例如产品类别的显示等等有关该系统的功能读者可通过下面所描述的业务过程来了解 AdventureWorks系统的业务过程包括
产品类别显示过程该过程允许用户显示AdventureWorks数据库中包括的所有类别用户可单击所显示类别列表中的特定类别以便显示所有相关的子类别
产品子类别显示过程在获得类别列表后接着可以显示所选中类别的所有子类别
产品显示过程通过这个过程可显示每个子类别中的产品列表单击特定子类别可获取该产品子类别包括的产品列表
正如读者看到的这些过程非常简单因为本实例主要关注的是集成可重用组件例如数据访问块异常管理块将数据库表转换为对象的泛型转换创建和利用存储过程等下面介绍一下系统架构方面的内容
系统架构
图说明了贸易系统的架构
数据库设计
既然大家已经了解了包括的业务过程那么下面将讲解实现解决方案所需的各个构造块为达到本实例目的实例余下部分的讨论将分为()数据库设计()实现CLR存储过程()实现数据访问和业务逻辑组件()实现Web站点下面首先介绍数据库方面的设计
本实例使用的AdventureWorks数据库包括多个表但是该实例仅使用了其中的三个表 ProductCategory ProductSubcategory和Product以下说明表的结构首先是ProductCategory表
ProductSubcategory表定义如下下表说明了Product表的结构下一步是说明创建操作这些结构的存储过程
实现CLR存储过程
SQL Server最优雅的功能之一是集成 NET CLR集成CLR的SQL Server在多个重要的方面扩展了SQL Server功能利用这种集成可创建数据库对象(例如存储过程)用户定义函数以及使用现代面向对象语言(例如VB NET和C#)创建触发器为达成本实例目的将说明使用C#创建存储过程的方法
首先在Visual Studio中以Visual Studio作为编程语言创建一个新的名为AdventureWorksDatabaseObjects的SQL Server项目由于创建的是数据库项目所以需要关联数据源与项目在创建项目的同时 Visual Studio将要求开发人员要么选择现有数据库引用要么添加新数据库引用选择AdventureWorks作为数据库一旦创建项目则在项目菜单中选择添加存储过程选项在添加新项对话框中输入StoredProcedures cs接着单击添加按钮在创建类之后可根据以下内容修改类中代码
示例实现CLR存储过程
using System; using System Data; using System Data SqlClient; using System Data SqlTypes; using Microsoft SqlServer Server; public partial class StoredProcedures{ [Microsoft SqlServer Server SqlProcedure] public static void GetProductCategories(){ using(SqlConnection connection= new SqlConnection( context connection=true)){ connection Open(); string sqlCommand= Select ProductCategoryID Name rowguid+ ModifiedDate from Production ProductCategory; SqlCommand mand= new SqlCommand(sqlCommand connection); SqlDataReader reader= mand ExecuteReader(); SqlContext Pipe Send(reader);}} [Microsoft SqlServer Server SqlProcedure] public static void GetProductSubcategories(int productCategoryID){ using(SqlConnection connection= new SqlConnection( context connection=true)){ connection Open(); string sqlCommand= Select ProductSubcategoryID ProductCategoryID Name+ rowguid ModifiedDate from Production ProductSubcategory+ Where ProductCategoryID=+ productCategoryID; SqlCommand mand= new SqlCommand(sqlCommand connection); SqlDataReader reader= mand ExecuteReader(); SqlContext Pipe Send(reader);}} [Microsoft SqlServer Server SqlProcedure] public static void GetProducts(int productSubcategoryID){ using(SqlConnection connection= new SqlConnection( context connection=true)){ connection Open(); string sqlCommand= Select ProductID Name ProductNumber MakeFlag+ FinishedGoodsFlag Color SafetyStockLevel ReorderPoint StandardCost+ ListPrice Size SizeUnitMeasureCode WeightUnitMeasureCode+ Weight DaysToManufacture ProductLine Class Style+ ProductSubcategoryID ProductModelID SellStartDate SellEndDate+ DiscontinuedDate rowguid ModifiedDate from Production Product+ Where ProductSubcategoryID=+ productSubcategoryID ToString(); SqlCommand mand= new SqlCommand(sqlCommand connection); SqlDataReader reader= mand ExecuteReader(); SqlContext Pipe Send(reader);}}};
在示例中首先导入所需命名空间接着声明StoreProcedures类导入的重要命名空间之一是Microsoft SqlServer Server该命名空间包括两个针对内部过程提供程序的重要类
SqlContext该类封装了为在SQL Server中执行内部过程所需的扩展对象另外该类还提供了事务和数据库连接它们是常规执行环境中的一部分
SqlPipe该类通常可将表格式结果和消息发送给客户端就概念而言该类与ASP NET中的Response类相似因此可用于将消息发送给调用者
StoredProcedures类包括三个静态方法GetProductCategories() GetProductSubcategories()和GetProducts()正如名称暗示 GetProductCategories()方法仅从AdventureWorks数据库中返回所有类别信息 GetProductSubcategories()方法可返回输入特定类别的子类别信息 GetProducts()方法可返回输入特定产品子类别的所有产品信息以下内容将详细讲解GetProductCategories()方法
在GetProductCategories()方法内部首先使用SqlConnection对象数据库连接注意传递给SqlConnection对象构造函数的连接字符串设置为 context connection=true这意味着使用登录用户的上下文打开数据库连接
using(SqlConnection connection= new SqlConnection( context connection=true))此时使用Open()方法打开数据库连接
connection Open();然后设置将要执行的SQL命令在这种情况下从ProductCategory表中获取所有记录 string sqlCommand= Select ProductCategoryID Name rowguid ModifiedDate from+ Production ProductCategory;接着将SQL查询语句和SqlConnection对象作为参数传递给SqlCommand类的构造函数以便创建SqlCommand对象实例
SqlCommand mand= new SqlCommand(sqlCommand connection);
此后通过调用SqlCommand对象的ExecuteReader()方法执行SQL查询SqlDataReader reader= mand ExecuteReader();使用SqlPipe对象将表格式结果和消息返回给客户端这是通过SqlPipe类的Send()方法来实现
SqlContext Pipe Send(reader); Send()方法提供了多种重载以便通过管道将数据发送给调用方应用程序
StoredProcedures类中所有方法都使用Send()方法来将表格式结果以SqlDataReader对象格式发送给客户应用程序由于GetProductSubcategories()和GetProducts()与GetProductCategories()方法的实现非常相似因此不会对前二者进行详细讲解
既然创建了存储过程那么就可以非常简单和直接的应用它们了在应用之前需要首先生成项目为了生成项目可在Visual Studio的菜单中选择生成→生成AdventureWorksDatabaseObjects如果出现编译错误则将显示在错误列表面板中一旦生成项目那么就能够通过选择菜单中的生成→部署AdventureWorksDatabaseObjects项来将其部署到SQL Server中这样不仅在SQL Server中注册了程序集而且还在SQL Server中部署了存储过程当存储过程部署到SQL Server后接着可以在数据访问层调用它这些内容将在下一节讲解
在执行存储过程之前记住使用SQL Server Management Studio执行以下代码以便在SQL Server中执行受管代码
EXEC sp_configure clr enabled; RECONFIGURE WITH OVERRIDE; GO虽然该实例使用Visual Studio创建受管存储过程但是开发人员还是能够轻松使用文本编辑器(例如记事本)获得相同的结果
另外可能有些读者会感到疑惑到底何时使用T SQL何时使用受管代码呢?这个问题的答案很简单受管代码比T SQL更加适合实现复杂的执行逻辑同时它对于完成许多复杂任务都具有广泛支持包括字符串处理和正则表达式 T SQL比较适合实现具有少量或者非过程性逻辑的数据访问的情况本实例中的存储过程很简单最好使用T SQL编写然而却使用了受管代码的方法这主要是为了说明创建和使用受管存储过程的方法
小结
lishixinzhi/Article/program/net/201311/12279三、如何在sql server 2005下安装并导入adventureworks数据库
首先,去微软官方网站下载AdventureWorksdb.msi,这是AdventureWorks的安装程序。然后把此文件和相关文件复制到你的计算机上。运行安装文件,这样这两个数据库就装到了你的计算机上了。但实际上并没有完全完成数据库的安装。
有两种方法可以完成安装程序:可以使用sqlcmd,它看起来像是个dos窗口。或是使用图形界面安装。
方法一:
运行SQL Server Management Studio。单击工具栏右边数第八个按钮来打开 sqlcmd窗口(图标是一个红色惊叹号)。在Listing A中输入指令。 execsp_attach_db@dbname=N'AdventureWorks',@filename1=N'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataAdventureWorks_Data.mdf',?@filename2=N'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataAdventureWorks_log.ldf'提示:如果没有选择默认安装,则必须输入文件的正确路径。
方法二:
此方法通过图形界面来连接数据库。除了保存所输入的内容外,图形界面能用最简单的方式来连接多个数据库。
步骤如下:
1、在Object Explorer(项目资源管理器)中选择数据库模式。
2、单击鼠标右键,选择连接到tear-off菜单,打开数据库连接对话框。
3、单击增加按钮,然后确定要增加的数据库位置(也可以一次加入多个数据库)。连接数据库的注意事项虽然在 SQL Server 2005中文件的结构已经发生了改变,你仍然可以连接SQL Server 2000的数据库。但是只有选择数据库的新格式,才能体验到SQL Server 2005的新特性,你可以任意选择一种方式。