日期:2014-05-16  浏览次数:20848 次

sql 存储过程
在存储过程中写了一条insert语句,然后又select了一次最大值(这个最大值不是自增长),现在是想知道这个select最大值应该是在这一次事务处理里完成的,不会是好多用户同时新建数据,然后获得不是本条新增的最大值吧
------解决方案--------------------
引用:
Quote: 引用:

在一个事务中,也有可能 查询到 不是本条新增的最大值

那怎么写可以保险一些呢?


可以,因为要实现你的需求,无非就是提高隔离级别,但是,这样会导致性能严重下降,阻塞其他的事务
------解决方案--------------------
如果是SQL2005及以上版本的MSSQL,
可以在insert语句里用output子句,获取该新增的最大值(如下例子).就不会有并发执行的问题.

-- 建测试表
create table wx(c1 int,c2 varchar(10))

-- 建临时表
create table #t(c1 int)

insert into wx(c1,c2) 
 output inserted.c1 into #t 
 values(40,'aaa')

-- 获取刚insert新增的c1值
select c1 from #t
/*
c1
-----------
40

(1 row(s) affected)
*/