求一个存储过程

悟北 2011-10-18 07:19:35
求一存储过程
输入参数为category_id
A表 ID Level
B表 ID A_ID Category_id ……
要根据A表中的每一个等级产生分别一个数据集,返回这些数据集
...全文
68 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
悟北 2011-10-20
  • 打赏
  • 举报
回复

问题解决:不是从这里解决的,特写下留给需要的人
问题描述
A表中内容为
ID - Level
1 - 国家级
2 - 省级
3 - 市级
4 - 校级
此内容不固定。
B表中内容
ID - Category_ID - Level_ID - Level_Name ……
1 - 1 - 1 - 国家级 ……
2 - 1 - 2 - 省级 ……
3 - 1 - 1 - 国家级 ……
4 - 1 - 2 - 省级 ……
4 - 1 - 3 - 校级 ……
5 - 2 - 1 - 国家级 ……
6 - 2 - 2 - 省级 ……

存储过程功能为
输入参数category_id = 1
得到结果:
数据集1:
1 - 1 - 1 - 国家级 ……
3 - 1 - 1 - 国家级 ……

数据集2:
2 - 1 - 2 - 省级 ……
4 - 1 - 2 - 省级 ……
数据集3:
4 - 1 - 3 - 校级 ……
由存储过程返回,在C#中可以用Dateset.Table[0],Dateset.Table[1],Dateset.Table[2]分别取到这三个数据集
解决方法:
不一定要数据库将不同等级的数据集分离,可以到程序中分离。
在数据库中查询出类型编号为category_id的数据集,我用的是C#,所以类型Dataset中有个方法为Select,可以从对应的数据集中找出符合条件的数据集合。
悟北 2011-10-18
  • 打赏
  • 举报
回复
我的问题和你说的性质不太一样,我是要取出所有分类号为category_id的数据,但是对于不同等级的数据我要分开,也就是说存储过程中有多个select时,在C#程序中可以用数据集Dataset.Tables[i]来取对应的select出的数据集
--小F-- 2011-10-18
  • 打赏
  • 举报
回复
USE tempdb
GO

-- 建立演示环境
CREATE TABLE Dept(
id int PRIMARY KEY,
parent_id int,
name nvarchar(20))
INSERT Dept
SELECT 0, 0, N'<全部>' UNION ALL
SELECT 1, 0, N'财务部' UNION ALL
SELECT 2, 0, N'行政部' UNION ALL
SELECT 3, 0, N'业务部' UNION ALL
SELECT 4, 0, N'业务部' UNION ALL
SELECT 5, 4, N'销售部' UNION ALL
SELECT 6, 4, N'MIS' UNION ALL
SELECT 7, 6, N'UI' UNION ALL
SELECT 8, 6, N'软件开发' UNION ALL
SELECT 9, 8, N'内部开发'
GO

-- 查询指定部门下面的所有部门
DECLARE @Dept_name nvarchar(20)
SET @Dept_name = N'MIS'
;WITH
DEPTS AS(
-- 定位点成员
SELECT * FROM Dept
WHERE name = @Dept_name
UNION ALL
-- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归
SELECT A.*
FROM Dept A, DEPTS B
WHERE A.parent_id = B.id
)
SELECT * FROM DEPTS
GO

-- 删除演示环境
DROP TABLE Dept
悟北 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fredrickhu 的回复:]

典型的BOM结构
[/Quote]
不懂。。。。求解释
--小F-- 2011-10-18
  • 打赏
  • 举报
回复
典型的BOM结构
悟北 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 roy_88 的回复:]

有沒有數據?是樹形結構?
SQL code
select * from A inner join B on a.ID=b.A_ID where b.Category_id=@Category_id
[/Quote]
还在帮忙不?
悟北 2011-10-18
  • 打赏
  • 举报
回复
这样说吧,A表中存有不同等级的编号和名称,如1-国家级,2-省级,3-市级。。。。。B表中保存了一些文件信息,其中B中有一列表示该文件的等级ID号和分类ID号,输入一个分类号category_id,得到分类号为category_id,分别取出各个等级的B表中的记录,是分别取出而不是放在一个数据集里面,即不是返回一个select
悟北 2011-10-18
  • 打赏
  • 举报
回复
我的目的要用一个Dateset取得存储过程返回的多个数据集,用Dateset.Table[i]取出。

就是输入一个分类的ID号,依次按照表A中的ID,找出B表中对应的记录,假如A中有3条记录,ID分别为1,2,3。而B表中的A_ID分别有3个1,2个2,4个3,那么存储过程返回三个数据集,分别为A_ID为1且category_id为输入的ID号、A_ID为2且category_id为输入的ID号,A_ID为3且category_id为输入的ID号。在程序中我用Datateset.Table[0],Dateset.Table[1],Dateset.Table[2]分别可以取出存储过程中查出的三个数据集
中国风 2011-10-18
  • 打赏
  • 举报
回复
有沒有數據?是樹形結構?
select * from A inner join B on a.ID=b.A_ID where b.Category_id=@Category_id

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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