读书人

数据库 SQL 话语

发布时间: 2012-12-16 12:02:32 作者: rapoo

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


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

读书人网 >SQL Server

热点推荐