如果是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)
*/
可以在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)
*/
解决方案 »
- sql2000语句问题??
- sql语句的问题
- XP客户端出现用户'(null)' 登录失败。未与信任 SQL Server 连接相关联(服务器端WIN2003,SQL SERVER 2000 采用了混合验证)
- 一个查询问题。
- 如何用SQL server2000存储过程的方法根据本地IP 限制新闻列表的输出,如果本地ip不在某条新闻的IP允许范围内 那么新闻列表就不输出
- 关于in 和 inner join 语句的效率?老手们来看看
- 继续求教一句SQL查询问题!
- 求条SQL语句~~~
- 下面的sql语句怎么执行结果能出来,但不对。
- sql2008 事务回滚异常
- [求助]对一个连续重复数据的复杂求和
- 根据表A的某字段查询表B中的字段
我先获得了一个最大值,放到@MaxID里,这个变量我在定义的时候就是output的,然后给它+1放到insert插入语句里,然后我在程序里在接收这个output,是不是也不会出现并发问题SELECT @MaxID=ISNULL(MAX(ObjID),0)+1 FROM KT_ASSET_CLASS --得到最大值SET @Str='INSERT INTO ' + @TableID + '(ObjID,' + @Column + ')VALUES('+@MaxID+',' + @VALUE + ')';