ALTER PROCEDURE [dbo].[up_OpenTryService]AS
BEGIN TRANSACTION
/**//* ------- 更新操作 ---------- */
update 表名 set ...
if @@RowCount <> 1
begin
RAISERROR('错误1', 16, 1)
goto Problem
end
/**//* ------- 增加操作 ---------- */
insert into 表名...
if @@RowCount <> 1
begin
RAISERROR('错误2', 16, 1)
goto Problem
end COMMIT TRANSACTION
returnProblem:
Rollback Transaction
我想使数据一致性,就是更新和插入同时进行,上面的事务处理有什么问题吗,我用c#测试的时候,为什么没有一致呢,模拟出错的时候,事务没回滚,有时候更新成功了但是没有插入
BEGIN TRANSACTION
/**//* ------- 更新操作 ---------- */
update 表名 set ...
if @@RowCount <> 1
begin
RAISERROR('错误1', 16, 1)
goto Problem
end
/**//* ------- 增加操作 ---------- */
insert into 表名...
if @@RowCount <> 1
begin
RAISERROR('错误2', 16, 1)
goto Problem
end COMMIT TRANSACTION
returnProblem:
Rollback Transaction
我想使数据一致性,就是更新和插入同时进行,上面的事务处理有什么问题吗,我用c#测试的时候,为什么没有一致呢,模拟出错的时候,事务没回滚,有时候更新成功了但是没有插入
BEGIN TRANSACTION
update 表名 set ...
if @@RowCount <> 1 -->只更新一条吧?@@RowCount=1,下同。
begin
RAISERROR('错误1', 16, 1)
goto Problem
end
insert into 表名...
if @@RowCount <> 1
begin
RAISERROR('错误2', 16, 1)
goto Problem
end COMMIT TRANSACTION
returnProblem:
Rollback Transaction
ALTER PROCEDURE [dbo].[up_OpenTryService]AS
BEGIN TRANSACTION
update 表名 set ...
if @@RowCount > 0
begin
RAISERROR('错误1', 16, 1)
goto Problem
end
insert into 表名...
if @@RowCount > 0
begin
RAISERROR('错误2', 16, 1)
goto Problem
end COMMIT TRANSACTION
returnProblem:
Rollback Transaction
每次操作如果等于一条就成功,否则就失败楼主还有考虑并发性
每次rowcount的值都是不一样的