请教一个插入的sql语句!

请教一个插入的sql语句!

问题描述:

task表中现有数据:
pid id parentid name start finish
2000 5743 0 2000年数据1 2009-8-27 2009-8-27

2000 5744 5743 2000年数据2 2009-8-27 2009-8-29

sequence表中:
type 2744

当我需要插入这样的新数据时(比如是2009年8月28号插入的):
子件号 父件号 周期
2001年数据1 1天
2001年数据2 2001年数据1 4天

该怎么实现才能插入上面的新数据后task表中的数据如下:

pid id parentid name start finish
2000 5743 0 2000年数据1 2009-8-27 2009-8-27

2000 5744 5743 2000年数据2 2009-8-27 2009-8-27
2001 5745 0 2001年数据1 2009-8-28 2009-8-29
2001 5746 5745 2001年数据2 2009-8-28 2009-9-1

2001的id号是取sequence表type+1,然后将后面的数据id值依次变成新值,请教!
[b]问题补充:[/b]
谢谢关注,三个回复:
1. 我用的数据库是sqlserver2000
2. 数据库中与start和finish的类型是日期型(也就是date).
3.数据是从数据库里另一个表获得的。
[b]问题补充:[/b]
请教各位高手!
[b]问题补充:[/b]
可是id和parentid怎么写sql语句才能实现呢?
[b]问题补充:[/b]
十分感谢你的回复,有个问题请教一下:我将id+1后,这时候要改变parentuid的值,是根据什么条件呢? update parentuid=id from task where name='2001年数据1' 可我是一万条数据的插入?会不会在效率上太差了?
[b]问题补充:[/b]
谢谢你提供的思路,那如果我一次插入一万条数据,在task上建立name的索引,能达到比较好的效率吗?

我将id+1后,这时候要改变parentuid的值,是根据什么条件呢?

你先从下面这个表中读取一行数据吧:
[quote]子件号 父件号 周期
2001年数据1 1天
2001年数据2 2001年数据1 4天 [/quote]

假如读取的就是第一行数据,通过第一行数据的父件号为空,可知该行数据没有父件号,那么在你插入的时候,parentuid就是0了;

然后读取第二行数据吧,第二行数据的父件号是“2001年数据1 ”,那你就可以用该值去你要插入的那个表中查找name等于“2001年数据1”的哪行记录呀,返回该行记录的id,这个id即为你要插入的这行数据的parentid ;

对于你说的效率,你可以优化你的SQL语句,或者在task上建立name的索引。

需要问楼主三个问题,才能回答:

1、你用的数据库
2、数据库中与start和finish的类型,是日期型,还是字符串型
3、下边的数据是从那获取的,是数据库,还是就是你手写的

[quote]子件号 父件号 周期
2001年数据1 1天
2001年数据2 2001年数据1 4天 [/quote]

从另外两张表中获取,要插入的数据,然后一块插入不就行了。

对于日期,用dateadd()函数就可以了

首先读取sequence表,获取type,然后加1 不就获取id了吗

然后读取:下面这个表
[quote]子件号 父件号 周期
2001年数据1 1天
2001年数据2 2001年数据1 4天 [/quote]

读取之后,第一记录,通过第一个字段可以获取你的pid把,然后通过第二个字段“父件号”因为为空,所以对应要插入的记录的parentid就是0

读取第一条时,通过父件号,“2001年数据1”,然后在再查你要插入的那个表,不就获取parentid 了吗

应该可以的