日期:2014-05-17  浏览次数:20572 次

数据库 SQL 语句
对数据库中的表进行批量的更新
现在我有一个存储过程 传递完参数后 先查找 如果有就更新,如果没有就插入

现在的问题是我如何知道哪些字段更新过,哪些字段没被改过

下面是存储过程
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   
------解决方案--------------------
你把它写好了,就看出来了:
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

------解决方案--------------------
引用:
你把它写好了,就看出来了:
SQL code??1234567891011121314if(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……


不是看这个过程  现在的问题是  我的程序需要返回一个数据集,数据集里面包括被修改过的字段,这个存储过程只有插入的有返回,更新的数据怎么返回呢? 
------解决方案--------------------
也就是说 我的更新操作也许什么也没有做,两个字段一样什么都不做,如果不一样就修改然后返回这个字段
我怎么判断 到底有没有修改过