日期:2014-05-18  浏览次数:20530 次

sql2005 插入错误 请大侠们帮忙 谢谢
大家好 请问大家一下 
俩张表
表T_Waitrd  
id(主键 int) p_name(char) st_time(datetime)

表T_doingrd
id(主键 int) p_name(char) P_Status(char)

我现在用了俩个ado来连接,显示在俩个DBGrid。 
要实现的功能:现选中DBGrid1(表T_Waitrd)中的一条记录,
然后要把它移到DBGrid2(表T_doingrd)中,
然后把DBGrid1中的要移动的记录删掉  
如果表T_doingrd中ID与表T_Waitrd中ID相同,
则在插入到表T_doingrd时的表T_Waitrd数据的id变为最后一条记录的ID加一

  declare @ID integer;
  Set @ID=0;
  declare @MAXID integer;
  select @MAXID=max(T_doingrd.ID)+1 From T_doingrd;
  select @ID=max(T_doingrd.ID) From T_doingrd inner join T_Waitrd on T_doingrd.ID=T_Waitrd.id;
  If (@ID is null) begin Set @ID=@MAXID end;
  Insert Into T_doingrd (T_Waitrd.ID,T_Waitrd.P_name,T_Waitrd.st_time) select @ID,T_doingrd.P_name,T_doingrd.st_time From T_doingrd,T_Waitrd Where T_doingrd.ID=T_Waitrd.ID;

大家帮忙看下,现在我从表T_Waitrd插入一条id与表T_doingrd id 不同时也提示违反了primary key约束‘PK—_doingrd’,不能再对象插入重复值 我不知道错在哪里了 请高手指正下谢谢!

------解决方案--------------------
Insert Into T_doingrd (T_Waitrd.ID,T_Waitrd.P_name,T_Waitrd.st_time) select @ID,T_doingrd.P_name,T_doingrd.st_time From T_doingrd,T_Waitrd Where T_doingrd.ID=T_Waitrd.ID;

改为 
Insert Into T_doingrd (T_Waitrd.ID,T_Waitrd.P_name,T_Waitrd.st_time) select @MAXID,T_doingrd.P_name,T_doingrd.st_time From T_doingrd,T_Waitrd Where T_doingrd.ID=T_Waitrd.ID;



------解决方案--------------------
存储过程,很弱!
------解决方案--------------------

declare @ID integer;
Set @ID=0;
declare @MAXID integer;
select @MAXID=max(T_doingrd.ID)+1 From T_doingrd;
select @ID=max(T_doingrd.ID) From T_doingrd inner join T_Waitrd on T_doingrd.ID=T_Waitrd.id;
If (@ID is null) 
begin 
Set @ID=@MAXID
Insert Into T_doingrd (ID,P_name,st_time)
 select @ID,T_doingrd.P_name,T_doingrd.st_time From T_doingrd,T_Waitrd Where T_doingrd.ID=T_Waitrd.ID;
end

------解决方案--------------------
既然选中了dbgrid1中的记录,应有dbgrid1中记录的id值
应这样来处理
1.取dbgrid1中选中记录的id值
2.查询表t_doingrd表是否有此id值,如果有则生成表t_doingrd的最大值即@maxid
插入时用此最大值作为id号,否则用dbgrid1中选中的ID号作为插入id号
3.对t_doingrd插入记录
4.删除t_waitrd的选中记录

具体程序
SQL code

declare @maxid int,@id int
set @id=选中的dbgrid1中的id值 --此值从ado中用参数录入
set @maxid=@id
set @maxid=if exists(select * from t_doingrd)
  select @MAXID=max(T_doingrd.ID)+1 From T_doingrd;

Insert Into T_doingrd (T_Waitrd.ID,T_Waitrd.P_name,T_Waitrd.st_time) select @maxid,T_doingrd.P_name,T_doingrd.st_time From T_Waitrd Where T_doingrd.ID=@id