数据库 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