请教一个sqlServer存储过程的编写,业务层由ASP.NET调用,我快崩溃了,多谢!

fishfree 2005-11-22 08:35:34
偶是sql菜鸟,水平不够,请各位大侠支着:
一个类目表中有三个字段:Id(自增),ColumnTypeName,ParentId,如果这个类目是最上级类目,它的ParentId就设为-1,若不是就设为此表中另一个类目的Id,也就是各层目录放在同一个表中,目前我只需要实现两层目录。

现在我编个存储过程想实现以下想法,注释中有
ALTER PROCEDURE GetSiblingColumnType

(
@ColumnTypeId int
)

AS

DECLARE @Parent int
DECLARE @ParentName varchar(50)
SELECT @Parent=ParentId,@ParentName=ColumnTypeName FROM kjcColumnType WHERE Id=@ColumnTypeId --保存上级目录ID和本级目录名
IF @Parent != -1 --如果不是最上级目录
BEGIN
SELECT Id,ColumnTypeName FROM kjcColumnType WHERE Id=@Parent --就返回同级目录的Id和名字
RETURN @ParentName --同时返回上级目录名作为整个栏目名
END
ELSE --否则,即已经是最上级目录
BEGIN
RETURN @ParentName + '-1' --就返回本级目录名作为整个栏目名,为了区别,在其后面添上一个“-1”,让业务层读取substring分析
END

问题是这里有两个SELECT语句,而且有一个在判断段中,不知道ASP.NET业务层中的SqlReader如何去获取数据,或者能否设计一个更加精巧的存储过程,在一个SELECT中就满足需要呢?

我搞了好几天了,就卡在这儿,人家催得急,请大家多多指教,鞠躬多谢!
...全文
124 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishfree 2005-11-23
  • 打赏
  • 举报
回复
谢谢各位的启发!我还是没有搞定,只好就在业务层里直接调用sql语句了,呵呵
wu896222 2005-11-23
  • 打赏
  • 举报
回复
--适用于多层目录
select a.Id,a.ColumnTypeName,
case when (select count(*) from kjcColumnType where id=a.parentid)>1 then
(select parentname from kjcColumnType where id=a.parentid) else a.columntypename end as parentname
from kjcColumnType a
where a.id=@ColumnTypeId
bytesoon 2005-11-22
  • 打赏
  • 举报
回复
可以用
select 。。。。。
union
select 。。。。。


要求两个返回字段要一致


------------------------------------
我的团队:www.51team.com

欢迎访问,有志者共谋事,每天都有惊喜,SOHO

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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