偶是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中就满足需要呢?我搞了好几天了,就卡在这儿,人家催得急,请大家多多指教,鞠躬多谢!
一个类目表中有三个字段: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中就满足需要呢?我搞了好几天了,就卡在这儿,人家催得急,请大家多多指教,鞠躬多谢!
select 。。
union
select 。。
要求两个返回字段要一致
------------------------------------
我的团队:www.51team.com欢迎访问,有志者共谋事,每天都有惊喜,SOHO
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