我这个存储过程调用时候:数据插入失败:
有哪位高手给我分析一下
我的目的是 把有重复记录的Temp表过滤的clock表中;过滤条件是如果clock表中行有和temp表中AssessID,Time这两个字段同时相等就不插入 否则就插入到新表ALTER  procedure [dbo].[proc_Addtab1] 
(@ID int=0, 
@AssessID varchar(20)=null, 
@ClockTime varchar(20)=null, 
@Time varchar(20)=null, 
@Late varchar(20)=null) 
as declare @count int 
declare cur_test cursor LOCAL FORWARD_ONLY STATIC  READ_ONLY  for 
select * from Temp open cur_test fetch cur_test into @ID,@AssessID,@ClockTime,@Time,@Late 
while(@@fetch_status=0) 
begin 
select @count = count(*) from Temp where AssessID = @AssessID and [Time]=@Time 
if @count =  0 
begin 
insert into Clock 
values(@ID,@AssessID,@ClockTime,@Time,@Late) 
end fetch next from cur_test into @ID,@AssessID,@ClockTime,@Time,@Late 
end close cur_test 
deallocate cur_test 
go

解决方案 »

  1.   

    你的clock表是空的吗?插入前是否需要先清空里面的数据。另外我可以不用游标实现,这个很明显不用游标效率更高。
      

  2.   

    insert into clock select ... from temp n where not exists (select 1 from clock where AssessID = n.AssessID and Time = n.Time)
      

  3.   


    ALTER  procedure [dbo].[proc_Addtab1] 
    (@ID int=0, 
    @AssessID varchar(20)=null, 
    @ClockTime varchar(20)=null, 
    @Time varchar(20)=null, 
    @Late varchar(20)=null) 
    as declare @count int 
    declare cur_test cursor LOCAL FORWARD_ONLY STATIC  READ_ONLY  for 
    select * from Temp open cur_test fetch cur_test into @ID,@AssessID,@ClockTime,@Time,@Late 
    while(@@fetch_status=0) 
    begin 
    --select @count = count(*) from Temp where AssessID = @AssessID and [Time]=@Time 这个地方应该是从clock表中统计记录数,改成下面这句
    select @count = count(*) from clock where AssessID = @AssessID and [Time]=@Time if @count =  0 
    begin 
    insert into Clock 
    values(@ID,@AssessID,@ClockTime,@Time,@Late) 
    end fetch next from cur_test into @ID,@AssessID,@ClockTime,@Time,@Late 
    end close cur_test 
    deallocate cur_test 
    go
      

  4.   

    另外我修修正下你的SQL语句从错误吧:
    select @count = count(*) from Temp where AssessID = @AssessID and [Time]=@Time
    改为
    select @count = count(*) from Clock where AssessID = @AssessID and [Time]=@Time 
     
      

  5.   

    给出Clock 的表结构
       是否字段个数不对。。或类型不一。。主键是否重复。。
       建议写Insert语 句为:   insert into Clock (字段列表)
      values(@ID,@AssessID,@ClockTime,@Time,@Late)