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