一个有点难度的存储过程

7707 2004-07-20 11:21:36
表A结构如下:
ID,int型,信息的唯一标记,自增长
PID,int型,父级信息ID
Subject,varchar,标题

顶级信息的PID=ID


要求:

目前有一条信息要插入,该信息的PID为一个字符串,若为顶级信息,该字符串为空,做为顶级信息入库;
如果不是顶级信息,则可能是如下格式:2 4 9 19(分隔符为空格),代表其父ID为 19,若库中不存在ID为19的记录,则取9,以此类推,若这四个ID都不存在,将做为顶级信息入库。

能用存储过程做到吗?如何做?
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
playyuer 2004-07-20
  • 打赏
  • 举报
回复
树型结构数据在数据库基本表中的存储及维护

http://dev.csdn.net/develop/article/18/18666.shtm
asphp 2004-07-20
  • 打赏
  • 举报
回复
declare @a as varchar(100)
declare @i as int
declare @p as int
declare @t as int
declare @n as int
set @a='14 12 123 122 19 12'
set @a=' '+ltrim((rtrim(@a)))
set @i=len(rtrim(@a))
set @t=@i+1
while @i>0
begin
if ltrim(substring(@a,@i,1))='' or @i=1
begin
if @i<>@t-1 --here avoid double or more space
begin
set @n= cast(substring(@a,@i+1,@t-@i) as int)
select @n

/*
@n is each split from number right to left
here you can process the number
*/
end
set @t=@i
end
set @i=@i-1
end

asphp 2004-07-20
  • 打赏
  • 举报
回复
declare @a as varchar(100)
declare @i as int
declare @p as int
declare @t as int
declare @n as int
set @a='14 12 123 122 19 12'
set @a=ltrim(@a)
set @i=len(rtrim(@a))
set @t=@i+1
while @i>0
begin
if ltrim(substring(@a,@i,1))='' or @i=1
begin
set @n= cast(substring(@a,@i+1,@t-@i) as int)
/*
@n is each split from number right to left
here you can process the number
*/
set @t=@i
end
set @i=@i-1
end
7707 2004-07-20
  • 打赏
  • 举报
回复
问题就在于分解呀,初学的,呵呵,能否帮忙写一个,让我学习一下?感激不尽!
windindance 2004-07-20
  • 打赏
  • 举报
回复
结合使用charIndex 和 substring 、cast就可以。
pjy 2004-07-20
  • 打赏
  • 举报
回复
好做呀!
你现在做有什么问题?
把PID分解比就行了!
7707 2004-07-20
  • 打赏
  • 举报
回复
感谢楼上各位,受益匪浅!

27,579

社区成员

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

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