各位专家,小弟刚刚开始应用SQL数据库。现在遇到一个存储过程的问题,我有两个表,一个“保单”表,一个TEMP表,我希望把TEMP表的记录,根据主键“保单号”来判断在“保单”表里是否存在相同的记录,如果相同,则更新update,如果不同则插入。我使用了一下的存储过程,但是提示如下的问题。请专家给予帮忙谢谢。
CREATE PROCEDURE xlsinput
as
 
declare @Field char
declare bcursor cursor for SELECT [保单号] AS 保单号 FROM 保单
print '开始执行'
open bcursor --打开游标
fetch next from bcursor into @Field
while(@@fetch_status=0) --循环开始
begin
if  EXISTS(select 保单.保单号 from 保单 join temp on 保单.保单号=temp.保单号 where 保单.保单号=@Field)
begin
Exec('update 保单 set 保单.被保险人=aa.被保险人,保单.险种=aa.险种,保单.保费=aa.保费,保单.批改保费=aa.批改保费 ,保单.计提月份=aa.计提月份 from temp aa where aa.保单号=保单.保单号 and aa.保单号='+@Field)
print '更新'
end
else
begin
Exec('insert 保单 select * from temp where temp.保单号='+@Field)
print '插入'
print 'test'
end
fetch next from bcursor into @Field
end
print '结束'
close bcursor --关闭游标
deallocate bcursor--释放资源
GO错误提示
开始执行
服务器: 消息 207,级别 16,状态 3,行 1
列名 'C' 无效。
插入
test
服务器: 消息 207,级别 16,状态 3,行 1
列名 'C' 无效。
插入
test
服务器: 消息 207,级别 16,状态 3,行 1
列名 'C' 无效。
插入
test
服务器: 消息 207,级别 16,状态 3,行 1
列名 'C' 无效。
插入
test
结束

解决方案 »

  1.   

    各位专家,小弟刚刚开始应用SQL数据库。现在遇到一个存储过程的问题,我有两个表,一个“保单”表,一个TEMP表,我希望把TEMP表的记录,根据主键“保单号”来判断在“保单”表里是否存在相同的记录,如果相同,则更新update,如果不同则插入。我使用了一下的存储过程,但是提示如下的问题。请专家给予帮忙谢谢。 create procedure my_proc 
    as
    begin
      update 保单表
      set 相关字段 = n.相关字段
      from 保单表 m, temp n
      where m.主键 = n.主键
      insert into 保单表 select * from temp where 主键 not in (select 主键 from 保单表)
    end
    go
      

  2.   

    为什么要用存储过程+游标呢,
    直接update不是更方便么?
      

  3.   

    谢谢dawugui  非常您。您写的代码非常简单明了。我是刚刚开始学习SQL应用的,你的帮助让我觉得其实很多东西可以很简单的处理,一定不要复杂来出来。谢谢您 !