祝锡永数据库第七章习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*第七章习题*/

/*1*/

drop procedure p1

go

create procedure p1 @cname varchar(50)

as

;with tmp as(

select b.categoryid,categoryname,SUM(amount) as 'amt' from OrderItems a

join Products b on a.ProductID =b.ProductID

join Categories c on b.CategoryID =c.CategoryID

group by b.CategoryID ,CategoryName )

select amt from tmp where categoryname=@cname

go

execute p1 'Confections'

/*2*/

drop procedure p2

go

create procedure p2 @pname varchar(80)

as

;with tmp as (

select a.productid,productname,RANK() over (order by sum(amount)) as 'rankid' from OrderItems a

join Products b on a.ProductID =b.ProductID

group by a.ProductID ,productname)

select rankid from tmp where ProductName=@pname

go

execute p2 'Tofu'

/*3*/

drop procedure p3

go

create procedure p3 @tablename varchar(40),@cname varchar(40)

as

declare @sql varchar(2000)

set @sql='if not exists (select data_type,character_maximum_length from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='''

set @sql=@sql+@tablename+''' and COLUMN_NAME='''

set @sql=@sql+@cname+''')'+CHAR(13)

set @sql=@sql+char(9)+'print '''+'*'+''''+CHAR(13)

set @sql=@sql+'else'+CHAR(13)

set @sql=@sql+char(9)+'select data_type,character_maximum_length from

information_schema.columns where table_name='''

set @sql=@sql+@tablename+''' and COLUMN_NAME='''

set @sql=@sql+@cname+''''

execute(@sql)

go

execute p3 'Products','ProductName'

/*4*/

drop function f1

go

create function f1(@cname varchar(40),@year int)

returns @t1 table(cname varchar(40),month int,num int,amt money)

as

begin

;with tmp as(

select companyname,month(orderdate) as 'xmonth',count(*) as 'num',sum(amount) as 'amt' from orderitems a

join orders b on a.orderid =b.orderid

join customers c on b.customerid =c.customerid

where year(orderdate)=@year and companyname=@cname

group by companyname,month(orderdate))

insert into @t1(cname,month,num,amt)

select companyname,xmonth,num,amt from tmp

return

end

go

select * from .dbo.f1('Alfreds Futterkiste',2009)

/*5*/

drop function f2

go

create function f2(@date datetime)

returns @t1 table(orderid int,customerid varchar(10),employeeid varchar(10),orderdate datetime,requireddate datetime,invoivedate datetime,shippeddate datetime,shipperid int,freight decimal(12,2))

as

begin

insert into @t1

select * from orders where invoicedate<=@date and shippeddate >@date

return

end

相关文档
最新文档