【SQL开源代码栏目提醒】:以下是网学会员为您推荐的SQL开源代码-CH17.sql,希望本篇文章对您学习有所帮助。
-- P17-3
DECLARE @TopProductID int
SET @TopProductID = dbo.GetTopProductID('2006')
SELECT , 区域
FROM GetEmployeeFromProdId(@TopProductID)
WHERE 区域 = '北区'
-- P17-8
/* 传回在指定年度中最畅销的书籍 */
CREATE FUNCTION GetTopProductID
(@year char(5))
RETURNS int
BEGIN
DECLARE @id int
SELECT TOP 1 @id = 书籍编号
FROM 订单 JOIN 订单细目
ON 订单.订单序号 = 订单细目.订单序号
WHERE DATEPART (YYYY, 日期) = @year
GROUP BY 书籍编号
ORDER BY SUM(数量) DESC
IF @@ROWCOUNT = 0
RETURN 0
RETURN @id
END
GO
SELECT dbo.GetTopProductID('2006') AS '书籍编号'
GO
-- P17-10a
CREATE FUNCTION 依售价查询书籍
(@由 money, @到 money)
RETURNS TABLE
RETURN (SELECT 书籍编号, 书籍名称, 单价
FROM 书籍
WHERE 单价 >=@由 AND 单价 <= @到)
GO
SELECT *
FROM 依售价
查询书籍(400, 450)
ORDER BY 单价
-- P17-10b
SELECT *
FROM ::fn_helpcollations()
-- P17-13
/* 找出所有负责销售指定书籍的相关人员 */
CREATE FUNCTION GetEmployeeFromProdId
(@ProductId int)
RETURNS @Employee TABLE
( 员工编号 int NOT NULL,
varchar (20) NOT NULL,
性别 char (2),
主管员工编号 int,
职称 varchar (10),
区域 varchar (10))
BEGIN
/* 将产品负责人的资料加入要传回的 @Employee 中*/
INSERT @Employee
SELECT 员工.*
FROM 员工 JOIN 书籍 ON 员工编号 = 负责人
WHERE 书籍编号 = @ProductId
/* 将负责人的员工编号存入 @id 中 */
DECLARE @id int
SELECT @id = 员工编号
FROM @Employee
/* 将负责人的直属销售员也加入要传回的 @Employee 中*/
INSERT @Employee
SELECT *
FROM 员工
WHERE 主管员工编号 = @id
RETURN
END
GO
SELECT *
FROM GetEmployeeFromProdId(6)
SELECT
FROM GetEmployeeFromProdId(6)
WHERE 区域 = '北区'
GO
-- P17-16
CREATE FUNCTION Calc
(@a int, @b int =3)
RETURNS int
BEGIN
RETURN @a + @b
END
GO
SELECT dbo.Calc(5, 6)
GO
SELECT dbo.Calc(5, Default)
GO
SELECT dbo.Calc(5)
-- P17-17
CREATE FUNCTION NewID()
RETURNS varchar(5)
BEGIN
DECLARE @id varchar(5), @i int
/* 找出目前最大的编号 */
SELECT TOP 1 @id = 编号
FROM 出货记录
ORDER BY 编号 DESC
IF @@ROWCOUNT = 0 /* 如果是第一笔记录 */
RETURN 'A0001'
SET @i = CAST(RIGHT(@id, 4) AS int) + 1
SET @id = CAST(@i AS varchar)
RETURN 'A' + REPLICATE('0', 4-LEN(@id)) + @id
END
GO
SELECT dbo.NewID()
-- P17-19
CREATE FUNCTION 计算优惠价
(@类别编号 int, @单价 money)
RETURNS money
BEGIN
DECLARE @优惠价 money
SELECT @优惠价 = 折扣 * @单价
FROM 书籍类别
WHERE 类别编号 = @类别编号
RETURN @优惠价
END
GO
SELECT dbo.计算优惠价(1, 20)