《SQL Server数据库及应用》

《SQL Server数据库及应用》 实训报告系 别 经管系 专 业 计算机信息管理 班 级 姓 名 指导教师 前言数据库技术是计算机科学技术的分支,信息技术中的重要支撑,是衡量信息化程度的主要标志数据库的应用领域非常广泛,不论是政府、银行、证券、医院、公司或大型企业等,实施信息化都需要使用数据库数据库的人才需求呈增长趋势微软的SQL Server在数据库市场占有一定的份额,因此了解掌握数据库的相关概念,掌握数据库的设计和实施方法,具有在SQL Server上创建、管理数据库及其对象、查询与统计数据、管理数据表数据(合并数据表中的数据,将数据抽取到另一个表中,以及维护数据表数据)、数据库设计、创建与管理数据库、创建与管理表、实施数据完整性(在SQL Serve中实施数据完整性技术)、实现索引(可在查询数据表中的信息好时提高查询速度)、创建与管理视图(了解视图的概念及对视图的各种操作)、创建与管理存储过程(存储过程的概念以及对存储过程的各种操作)、创建及管理触发器(触发器的各种操作)、创建与使用游标(游标的创建及综合应用)、处理事务与锁(事务与锁的使用)、以及对SQL Server数据库进行日常管理与维护的能力,基本了解基于SQL Server数据库应用系统开发技术非常重要。
目录 【实训课题】 3【实训目的】 3【实训设备】 3【实训内容】 3【实训任务】 3任务一:需求分析 4任务二:概念设计 4任务三:逻辑设计 6任务四:功能实现 61.创建Sale数据库 62.创建表 73.向表中添加数据 74.使用Select语句查询数据 85.创建索引,通过索引提高查询速度 86.创建视图并通过视图操作表数据 87.使用 T-SQL 编写程序 108. 使用触发器实现数据完整性 119. 创建游标并处理事务 1210.为用户设置权限 1311.实训总结 15【实训课题】 产品销售管理数据库【实训目的】(1)掌握运用数据库原理进行系统分析和设计的方法;(2)掌握关系数据库的设计方法;(3)掌握利用SQL Server 2005技术;(4)熟悉各种SQL语句及对数据库的访问方法实训设备】安装SQL Server 2005软件的计算机【实训内容】1.需求分析 2. 概念设计 3.逻辑设计4.功能实现【实训任务】 产品销售数据库设计与维护数据库应用系统开发的工作过程及任务:系统测试:联调、测试与评价需求分析:产品销售需求概要设计:功能、数据建模功能实现:创建数据库、表数据操作、用户界面详细设计:软件结构设计、用户界面设计、数据库设计产品销售管理系统开发的工作过程及工作任务:系统调试:联调、测试与评价需求分析:产品销售需求用户界面开发① ⑨ ⑩查询客户表、产品表、入库表、销售表信息 ⑧ 数据操纵(增、删、改)数据库详细设计创建产品销售数据库、表、完整性 ⑤ ⑥ ⑦ 关系模型规范产品销售关系模型产品销售概念模型② 任务一:需求分析 1.编写目的随着社会的发展,对于各行各业的人才,如何使用最低的成本获得最大的利润变得尤为重要,市场需要什么,我们就做什么,为了更好的了解国内外的市场,这份报告也就随之而生了2.背景中国经济正处于一个高速发展时期,经济收入增加,使得人们对物质的需求也不断的攀升,交通支持下的物流水平,IT技术,信息技术的高速发展为该行业的整体成本降低,市场开拓,服务完善带来了无穷的机遇。
消费者个性化需求的日益显著,而销售企业则更能掌握消费者各种信息,使得商业资本在产业链中的角色日益增重3.内容及分析通过调查市场需求,各地的价格,生产公司可以根据调查作出某种产品怎样才可以获得最大利润,更好的满足市场需求 任务二:概念设计1.确定实体(1)客户表(Customer)(2)产品表(Product)(3)入库表(ProIn)(4)销售表(ProOut)2.确定实体及主键主键:产品表的产品编号列名数据类型及长度是否允许为空约束CusNonvarchar(3)NOT NULL主键、长度为3CusNamenvarchar(10)NOT NULL唯一Addressnvarchar (20)NULLTelnvarchar (20)NULL备注TextNULL入库日期库存数量单价产品名称产品编号住址联系电话客户姓名客户编号客户表销售数量单价客户姓名客户编号产品名称产品编号销售日期销售产品入库3.创建E-R图属性单价库房入库数量产品名称产品编号任务三:逻辑设计关系数据类型(建立关系表,即二维表)1.将E-R图转化为数据表客户表客户编号客户姓名地址联系电话任务四:功能实现1.创建Sale数据库(1) 代码USE master GOCREATE DATABASE SaleONPRIMARY(NAME=Sale_data1, FILENAME='G:\Sale.mdf', SIZE=4MB, MAXSIZE=20MB, FILEGROWTH=1MB),(NAME=Sale_data2, FILENAME='G:\Sale.ndf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=1MB)LOG ON(NAME=Sale_log, FILENAME='G:\Sale.ldf', SIZE=10MB, MAXSIZE=20MB, FILEGROWTH=1MB)GO(2)结果2.创建表向Sale数据库中添加在Sale数据库中分别创建客户表(Customer)、产品表(Product)、入库表(ProIn)和销售表(ProOut)。
创建客户表(Customer)USE SaleGOCREATE TABLE Customer(CusNo nvarchar(3)NOT NULL, CusName nvarchar(10)NOT NULL, Address nvarchar(20) NULL, Tel nvarchar(20) NULL, 备注Text NULL)GO向表中添加主键约束ALTER TABLE CustomerADD CONSTRAINT PK_Customer PRIMARY KEY (CusNo)GO向表中添加唯一约束ALTER TABLE CustomerADD CONSTRAINT UN_CouName UNIQUE(CouName)GO3.向表中添加数据USE SaleGOINSERT INTOCustomer VALUES('001','杨婷','深圳',’18418166296’)INSERT INTOCustomer VALUES('002','陈萍','广东',’18418166295’)INSERT INTOCustomer VALUES('003','李东','深圳',’18418166294’)INSERT INTOCustomer VALUES('004','叶赫','广州',’18418166293’)Go产品表(Product)、入库表(ProIn)和销售表(ProOut)创建方法同客户表。
4.使用Select语句查询数据例如查询带“婷”的客户信息 USE SaleGOSELECT * FROM Customer WHERE CusName Like '%婷%'GO5.创建索引,通过索引提高查询速度创建Customer表中CusName列的唯一索引USE Sale GOCREATE UNIQUE INDEX IX_CusNameON Customer (CusName)GO6.创建视图并通过视图操作表数据(1)创建V_Sale1视图CREATE VIEW V_Sale1 ASSELECT CusName,CusNo,Address,TelFROM Customer GO(2)查看视图中的数据SELECT *FROM CustomerGO(3)使用INSERT语句插入数据USE SaleGOINSERT Customervalues('005','张三','西安','18418916291','备注')GO(4)使用UPDATE语句更新数据UPDATE CustomerSET CusNo=006WHERE CusName='张三' and Address='西安'GO(5)使用DELECT语句删除数据USE SaleGODELETE CustomerWHERE CusNo='006' andCusName='张三' AND Address='天水' and Tel=184189166297GO7.使用 T-SQL 编写程序 1>应用转换函数Customer表中客户编号为“004”的客户名称的长度,并输入结果。
USE SaleGO DECLARE @length int SELECT @length=Len(CusNo) FROM Customer WHERE CusNo='004'PRINT '004号客户名称的长度为:'+ CONVERT(varchar(10),@length)GO2>应用字符串函数将字符串“Welcome to SQL Qerver” 转换为大写字母输出DECLARE @change varchar(30) SELECT @change ='Welcome to SQL Serve'PRINT UPPER(@change)3>应用WHILE 语句编写计算n!(n=20)的程序,并显示计算结果DECLARE @i int,@PRODUCT FLOAT SELECT @i=1,@PRODUCT=1 WHILE @i<=20 BEGIN SELECT @PRODUCT=@PRODUCT*@i SELECT @i=@i+1 END PRINT '20!='+convert(char(11),@PRODUCT) GO8. 使用触发器实现数据完整性1>创建触发器为Product表创建一个UPDATE触发器create trigger setwillunm7 on productfor insert,update,deleteasprint'已自动更新proout表中相应产品编号的信息。
'goupdate productset prono='00021'where proname='电视'go SELECT *FROM ProductGO2>创建触发器实现即时更新每种产品的库存数量CREATE TRIGGER T_INSERT_ProInON ProInFOR INSERTASUPDATE ProductSET Stocks=Stocks+(SELECT Quantity FROM INSERTED)WHERE ProNo=(SELECT ProNo FROM INSERTEDPRINT '已更新产品表的库存数量'GO9. 创建游标并处理事务1>创建游标在Sale数据库中,创建存储过程P_SelProduct,逐行显示产品销售信息,内容包括产品编号、产品名称、销售日期、销售数量、销售金额,要求显示格式如下:产品编号 产品名称 销售日期 销售数量 销售金额00001 电视 2006-1-1 10 30000产品编号 产品名称 销售日期 销售数量 销售金额00002 空调 2006-1-2 5 10000代码如下CREATE PROCEDURE P_SelProductAS DECLARE @ProNo nvarchar(5),@ProName nvarchar(20),@SaleDate DateTime,@Quantity decimal(6,0),@Je decimal(8,2) DECLARE Crs CURSOR FOR SELECT P.ProNo,ProName,SaleDate,Quantity,Je=Price*Quantity FROM Product P,ProOut PO WHERE P.ProNo=PO.ProNo ORDER BY SaleDate OPEN Crs FETCH NEXT FROM Crs INTO @ProNo ,@ProName,@SaleDate,@Quantity,@Je WHILE @@FETCH_STATUS=0 BEGIN PRINT '产品编号 产品名称 销售日期 销售数量 销售金额'PRINT @ProNo+' '+@ProName+' '+STR(YEAR(@SaleDate),4)+'-'+STR(MONTH(@SaleDate),2)+'-'+STR(DAY(@SaleDate),2)+' ' +Str(@Quantity,6)+' ' +STR(@Je,8,2)+' ' FETCH NEXT FROM Crs INTO @ProNo ,@ProName,@SaleDate,@Quantity,@Je END CLOSE Crs DEALLOCATE CrsGO2>创建事物在Sale数据库中创建一个事务,当向ProOut表插入新数据时,如果Stocks(库存数)大于Quantity(销售数量),则允许销售,否则拒绝销售。
CREATE PROCEDURE P1@SaleDate DATETIME, @CusNo NVARCHAR(3), @ProNo NVARCHAR(5), @Quantity DECIMAL(6,0)AS BEGIN TRANSACTION INSERT ProOut(SaleDate, CusNo, ProNo, Quantity) VALUES (@SaleDate, @CusNo, @ProNo, @Quantity) DECLARE @CountNum INT SET @CountNum= (SELECT Stocks FROM Product WHERE PrNo=@ProNo) IF @CountNum<@Quantity BEGIN PRINT '库存数量小于销售数量,销售失败!' ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION ENDGO测试INSERT INTO ProOut VALUES('2006-1-1','001','00001',1000)GO查询结果SELECT distinct*from ProOutWHERE CusNo='001' AND SaleDate='2006-1-1'10.为用户设置权限(1)在“安全性”里设置用户权限1>打开“SQL Server Management Studio”的“对象资源管理器”窗口。
2>选择“数据库实例名”— “安全性”— “登录名”选项,鼠标右键单击要修改权限的登录名,在弹出的快捷键菜单里选择“属性”选项3>弹出“登陆属性”对话框,在该对话框里选择“用户映射”选项也可以在添加登录名时,也可以在对话框里选择“用户映射”标签,进入选项卡4>在改对话框里可以设置此登陆帐户可以访问哪些数据库在“映射到此登录名的用户”区域里,显示查该数据库服务器里所以的数据库名,选中数据库前的复选框,则表示次登陆帐户可以登陆该数据库5>在选中数据库前的复选框之后,在“数据库角色成员身份”区域里的“public”复选框里会被自动选择上在每个数据库中,所以用户都会在public角色的成员,并且不能被删除2)在数据库里设置用户权限1>启动“SQL Server Management Stuido”,以sa用户或超级用户身份连上数据库实例在“对象资源管理器”里选择“数据库实例名”— “Northwind”— “安全性”— “用户”2>鼠标右键单击“userl”用户,在弹出的快捷菜单里选择“属性”选项,弹出“数据库用户”对话框,在改对话框里选择“安全对象”标签3>弹出对话框,单击“添加”按钮,弹出 “添加对象”对话框,在改对话框里可以选择希望查看的对象类型的选择对话框。
4>弹出 “选择对象”对话框,在该对话框里单击“对象类型”按钮5>弹出 “选择对象类型”对话框,在该对话框里可以现在数据库表里的可在对象类型,在本例中选择“表”复选框,然后单击“确定”按钮6>单击“浏览”按钮11.实训总结两周的SQL Server2005数据库及应用的实训结束了两周的实训让我学到了好多知识也收获了好多,这次实训让我明白了我们实训的主要目的是让我们通过不断的上机实习以及使用它来解决一些力所能及的实际问题,这样,才能够更好的掌握技能,在遇到程序调试不通过时,会通过缩小范围的分析来锁定问题所在,因此,我提醒自己在编写程序时要特别注意细节方面的问题,一个小小的疏忽就能导致整个程序不能运行,做到有细心、有耐心的编写程序、检查代码的好习惯这次实训也提高了运用计算机技术的素质这次实训项目对于自己也是一个全新的挑战和对于自身能力的提高,在此期间,有老师和同学的帮助和讲解,让我认识到团队精神的重要性,一个懂得合作的团队的力量是无穷的,不管是什么困难,大家一起总会解决遇到一些比较棘手的问题也学会了冷静地解决,而不是盲目地学习,在不断解决问题的同时自己也可以学到好多课本以外的知识,在完成作业时必须做到严谨,认真,有时一点小的错误会引发好多问题,同时也看到了自身的不足,要加强这类程序设计的练习,只有通过不断地去做,不断学习,才能发现更多的问题和学习的方法。
学习是一个不进则退的过程,所以,需要更加努力感谢学校给我们这次实训的机会,感谢老师孜孜不倦的讲解,感谢同学们的帮助。