首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql2005 插入异常 请大侠们帮忙 多谢

2012-07-29 
sql2005 插入错误 请大侠们帮忙 谢谢大家好 请问大家一下俩张表表T_Waitrdid(主键 int) p_name(char) st_t

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 intset @id=选中的dbgrid1中的id值 --此值从ado中用参数录入set @maxid=@idset @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 

热点排行