求一函数,在线等

KLL 2011-04-23 11:51:47
CREATE TABLE test
(
stu_no int,
stu_name varchar(20),
stu_score float
)
INSERT INTO test
SELECT 1,'张三',70 UNION
SELECT 2,'李四',80 UNION
SELECT 3,'王五',60
/*************
要求如:如第二个字段为‘张三’,则这条数据拆分为N条
写一函数
CREATE FUNCTION fn_b_gettable
(
@stu_name varchar(20),
@stu_count int
)
RETURN TABLE
...............
...全文
69 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
AcHerat 2011-04-23
  • 打赏
  • 举报
回复

CREATE TABLE test
(
stu_no int,
stu_name varchar(20),
stu_score float
)
INSERT INTO test
SELECT 1,'张三',70 UNION
SELECT 2,'李四',80 UNION
SELECT 3,'王五',60
GO

CREATE FUNCTION fn_b_gettable
(
@stu_no int,
@stu_name varchar(20),
@stu_count int
)
RETURNS @t TABLE
(
stu_no int,
stu_name varchar(20),
stu_count int
)
AS
BEGIN
DECLARE @i int
SET @i = 1
WHILE(@i <= @stu_count)
BEGIN
INSERT INTO @t SELECT @stu_no,@stu_name,@stu_count
SET @i = @i + 1
END
RETURN
END
GO

SELECT * FROM dbo.fn_b_gettable(1,'张三',5)

SELECT a.*
FROM test a join master..spt_values b ON b.[type] = 'p' and b.number between 1 and a.stu_score

DROP FUNCTION fn_b_gettable
DROP TABLE test

/*

stu_no stu_name stu_count
----------- -------------------- -----------
1 张三 5
1 张三 5
1 张三 5
1 张三 5
1 张三 5

(5 行受影响)

stu_no stu_name stu_score
----------- -------------------- ----------------------
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
2 李四 80
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60
3 王五 60

(210 行受影响)
叶子 2011-04-23
  • 打赏
  • 举报
回复

--这样用是不行的
select *,dbo.fn_b_gettable(stu_name,7) from test

--可以这样用
select * from dbo.fn_b_gettable('张三',7)
union all
select * from dbo.fn_b_gettable('李四',3)
union all
select * from dbo.fn_b_gettable('王五',4)
/*
stu_no stu_name stu_score
----------- -------------------- ----------------------
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
2 李四 80
2 李四 80
2 李四 80
3 王五 60
3 王五 60
3 王五 60
3 王五 60
*/
叶子 2011-04-23
  • 打赏
  • 举报
回复


create FUNCTION fn_b_gettable
(
@stu_name varchar(20),
@stu_count int
)
RETURNs @t TABLE ( stu_no int,stu_name varchar(20), stu_score float)
as
begin
declare @i int
set @i=1
while(@i<=@stu_count)
begin
insert into @t
select * from test where stu_name=@stu_name
set @i=@i+1
end
return
end

select * from dbo.fn_b_gettable('张三',7)
/*
stu_no stu_name stu_score
----------- -------------------- ----------------------
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
1 张三 70
*/
KLL 2011-04-23
  • 打赏
  • 举报
回复
算了,结果出来就行了
KLL 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 maco_wang 的回复:]
你要返回一个表,在表中用表函数不行
[/Quote]
不了解
叶子 2011-04-23
  • 打赏
  • 举报
回复
你要返回一个表,在表中用表函数不行
KLL 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ssp2009 的回复:]
必须要函数?
[/Quote]
必须的
KLL 2011-04-23
  • 打赏
  • 举报
回复
如果第二个字段是张三的话就变成
1,'张三',70
1,'张三',70
1,'张三',70
根据第二个参数的数量定义
快溜 2011-04-23
  • 打赏
  • 举报
回复
必须要函数?
叶子 2011-04-23
  • 打赏
  • 举报
回复

select replicate(stu_name,stu_no) from test
/*
张三
李四李四
王五王五王五
*/
快溜 2011-04-23
  • 打赏
  • 举报
回复
不明白咋拆分。
KLL 2011-04-23
  • 打赏
  • 举报
回复
变成1,'张三',70
就是这条数据变成N条
叶子 2011-04-23
  • 打赏
  • 举报
回复
如果参数为2
张三变成 张三 张三
还是
张三变成 张 三
KLL 2011-04-23
  • 打赏
  • 举报
回复
在线等,不明白的再说
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧