您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页数据库实验六

数据库实验六

来源:叨叨游戏网
实验六

一、 实验目的

理解存储过程的概念、建立和调用方法

二、 实验环境

Windows 7, SQL Server 2008

三、 实验要求

1、建立五张表,每张表至少需要10条记录。

(1)/*员工人事表employee */ emp_no emp_name sex dept title date_hired birthday salary addr

(2)/*客户表customer */ cust_id cust_name addr tel_no zip

(3)/*销售主表sales */ order_no cust_id sale_id tot_amt order_date ship_date invoice_no

(4)/*销货明细表sale_item */ order_no prod_id qty int char(5) int Not null, Not null, primary key primary key 订单编号 产品编号 销售数量 int char(5) char(5) numeric(9,2) datetime datetime char(10) Not null Not null, primary key 订单编号 客户号 业务员编号 订单金额 订货日期 出货日期 号码 char(5) char(20) char(40) char(10) char(6) Not null Not null, primary key 客户号 客户名称 客户住址 客户电话 邮政编码 char(5) char(10) char(1) char(4) char(6) datetime datetime int char(50) Not null Not null primary key 员工编号 员工姓名 性别 所属部门 职称 到职日 生日 薪水 住址 unit_price order_date

numeric(7,2) datetime 单价 订单日期 (5)/*产品名称表product */ pro_id prod_name char(5) char(20) Not null Not null primary key 产品编号 产品名称 2、建立表的同时创建表的约束。 (1) 为每张表建立主键约束。 (2) 通过拖放操作加入外键。

(3) 在表employee加入CHECK约束:输入的员工编号必须以E开头的5位数编号,性别只能为M/F。 (4) 为销售主表sales中的编号字段建立UNIQUE约束。

3、通过快捷菜单得到脚本。

4、利用存储过程,给employee表添加一条业务部门员工的信息。

5、利用存储过程从employee、sales、customer表的连接中返回所有业务员的姓名、客户姓名、销售金额。

6、 利用存储过程查找“刘德华”的员工编号、订单编号、销售金额。 7、 利用存储过程查找姓“李”并且职称为“职员”的员工的员工编号、订单编号、销售金额。 8、 利用存储过程计算出订单编号为10003的订单的销售金额。

四、 实验结果

CREATE DATABASE company ON PRIMARY

( NAME = 'company_data',

FILENAME ='H:\\wlwDatabase\\company_data.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON

( NAME = N'company_log',

FILENAME = N'H:\\wlwDatabase\\company_log.ldf' , SIZE = 1MB , FILEGROWTH = 10%) GO

GO

SET ANSI_PADDING OFF GO

/****** 对象: Table [dbo].[product] 脚本日期: 05/19/2011 13:53:59 ******/

SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[product]( (

[pro_id] [char](5) NOT NULL, [prod_name] [char](20) NOT NULL,

PRIMARY KEY CLUSTERED

[pro_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

SET ANSI_PADDING OFF GO

/****** 对象: Table [dbo].[employee] 脚本日期: 05/19/2011 13:53:57 ******/

SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[employee]( (

[emp_no] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

SET ANSI_PADDING OFF GO

/****** 对象: Table [dbo].[sales] 脚本日期: 05/19/2011 13:54:06 ******/ SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[sales](

[order_no] [int] NOT NULL, [cust_id] [char](5) NULL, [emp_no] [char](5) NOT NULL, [emp_name] [char](10) NOT NULL, [sex] [char](1) NULL, [dept] [char](4) NULL, [title] [char](6) NULL, [date_hired] [datetime] NULL, [birthday] [datetime] NULL, [salary] [int] NULL, [addr] [char](50) NULL,

PRIMARY KEY CLUSTERED

(

[sale_id] [char](5) NULL, [tot_amt] [numeric](9, 2) NULL, [order_date] [datetime] NULL, [ship_date] [datetime] NULL, [invoice_no] [char](10) NULL,

PRIMARY KEY CLUSTERED

[order_no] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

SET ANSI_PADDING OFF GO

/****** 对象: Table [dbo].[sale_item] 脚本日期: 05/19/2011 13:54:01 ******/

SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[sale_item]( GO

SET ANSI_PADDING OFF GO

/****** 对象: Check [CK__employee__014935CB] 脚本日期: 05/19/2011 13:53:57 ******/

ALTER TABLE [dbo].[employee] WITH CHECK ADD CHECK (([emp_no] like 'E____' AND ([sex]='F' OR [sex]='M'))) GO

/****** 对象: ForeignKey [FK__sale_item__order__07F6335A] 脚本日期: 05/19/2011 13:54:02 ******/

ALTER TABLE [dbo].[sale_item] WITH CHECK ADD FOREIGN KEY([order_no]) REFERENCES [dbo].[sales] ([order_no]) GO

/****** 对象: ForeignKey [FK__sale_item__prod___08EA5793] 脚本日期: 05/19/2011 13:54:02 ******/

[order_no] [int] NULL, [prod_id] [char](5) NULL, [qty] [int] NULL,

[unit_price] [numeric](7, 2) NULL, [order_date] [datetime] NULL

) ON [PRIMARY]

ALTER TABLE [dbo].[sale_item] WITH CHECK ADD FOREIGN KEY([prod_id]) REFERENCES [dbo].[product] ([pro_id]) GO

/****** 对象: ForeignKey [FK__sales__cust_id__060DEAE8] 脚本日期: 05/19/2011 13:54:06 ******/

ALTER TABLE [dbo].[sales] WITH CHECK ADD FOREIGN KEY([cust_id]) REFERENCES [dbo].[customer] ([cust_id]) GO

4、利用存储过程,给employee表添加一条业务部门员工的信息。

create proc add_infer as begin

insert into employee values ('e3244','宋士杰','M','业务',

'经理','2010-2-16','19-3-4',8000,'长沙') End go

Exec add_infer

9、 利用存储过程从employee、sales、customer表的连接中返回所有业务员的姓名、客户姓

名、销售金额。

create proc infer as begin

select emp_name,cust_name,tot_amt from sales,customer,employee

where sale_id = emp_no and customer.cust_id = sales.cust_id end go

exec infer

create proc sumary as begin

select emp_name,sum(tot_amt) as '销售金额' from sales,customer,employee

where sale_id = emp_no and customer.cust_id = sales.cust_id

group by emp_name end go

exec sumary

6、利用存储过程查找“刘德华”的员工编号、订单编号、销售金额。

create proc infer2 as begin

select emp_name,emp_no,order_no,tot_amt from employee,sales

where emp_name='刘德华'and emp_no=sale_id end go

exec infer2

create proc summary2 as begin

select emp_name,emp_no,sum(tot_amt)as '销售金额' from employee,sales

where emp_no=sale_id and emp_name='刘德华' group by emp_name,emp_no end go

exec summary2 drop proc summary2

7、利用存储过程查找姓“李”并且职称为“职员”的员工的员工编号、订单编号销售金额。

create proc infer3 as begin

select emp_name,emp_no,order_no,tot_amt from employee,sales

where title='职员'and emp_name like '李%'and emp_no=sale_id

end go

exec infer3

8、利用存储过程计算出订单编号为10003的订单的销售金额。

create proc infer4 as begin

select order_no,sum(qty*unit_price) as '消费金额' from sale_item

where order_no=10003 group by order_no end go

exec infer4

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务