对数据库中的表进行批量的更新
现在我有一个存储过程 传递完参数后 先查找 如果有就更新,如果没有就插入现在的问题是我如何知道哪些字段更新过,哪些字段没被改过下面是存储过程
ALTER PROCEDURE [dbo].[updateByExcle]  @Rbh char(4), 
@Sbh char(2),
@Xm varchar(10), 
@Mm varchar(6),
@Lz char(1), 
@Zzbh char(4),
@Sssbh char(2)
 
AS
BEGIN transaction 
if(exists (select * from dbo.Rs_ry where Rbh=@Rbh))
BEGIN
UPDATE dbo.Rs_ry 
SET Sbh=@Sbh,Xm=@Xm,Mm=@Mm,LZ=@Lz,Zzbh=@Zzbh,Sssbh=@Sssbh
where Rbh = @Rbh
if @@ERROR <> 0 goto errorEnd
    END
        ELSE
    BEGIN
       INSERT INTO dbo.Rs_ry 
       VALUES (@Rbh,@Sbh,@Xm,@Mm,@Lz,@Zzbh,@Sssbh) 
       select * from dbo.Rs_ry where  Rbh = @Rbh
       if @@ERROR <> 0 goto errorEnd
    END
 
if @@trancount > 0 commit transaction
errorEnd:
if @@error >0 rollback transaction   

解决方案 »

  1.   

    你把它写好了,就看出来了:
    if(exists (select * from dbo.Rs_ry where Rbh=@Rbh))
    BEGIN
    UPDATE dbo.Rs_ry 
    SET Sbh=@Sbh,Xm=@Xm,Mm=@Mm,LZ=@Lz,Zzbh=@Zzbh,Sssbh=@Sssbh
    where Rbh = @Rbh
    if @@ERROR <> 0 goto errorEnd
    END
    ELSE
        BEGIN
           INSERT INTO dbo.Rs_ry 
           VALUES (@Rbh,@Sbh,@Xm,@Mm,@Lz,@Zzbh,@Sssbh) 
           select * from dbo.Rs_ry where  Rbh = @Rbh
           if @@ERROR <> 0 goto errorEnd
        END