首页 新闻 会员 周边 捐助

获取某表最大ID

0
悬赏园豆:20 [已关闭问题]

向表中Insert时,需先获取此表的最大ID,然后加1。

问题:当同时多人进行此操作是,怎么保证每个人获取的是唯一的最大ID?

请问:通过c#程序和通过Sql语句两种情况如何解决?

ChineseCheng的主页 ChineseCheng | 初学一级 | 园豆:140
提问于:2010-06-29 10:17
< >
分享
其他回答(9)
0

把ID设置为自增就可以了.

每次插入完成后执行:SELECT @@IDENTITY;

kyo-yo | 园豆:5587 (大侠五级) | 2010-06-29 10:41
设为自增是不行的,我要取出最大ID后,经过处理如:加上一串字符后使用的。
支持(0) 反对(0) ChineseCheng | 园豆:140 (初学一级) | 2010-06-30 16:35
0

需要插入前获取,设置一个自增INT列。插入前MAX这个列。

Astar | 园豆:40805 (高人七级) | 2010-06-29 10:49
加入两个人同时去MAX这个列,得到的值岂不一样????
支持(0) 反对(0) ChineseCheng | 园豆:140 (初学一级) | 2010-06-30 16:34
0

设置为自增就行.

如果不愿意设置为自增,可写个存储过程用于插入,插入前获取最大的id,

 

declare @tmp_id int

select @tmp_id=max(id)

from XXX

 

然后insert时利用此@tmp_id即可

Localhost | 园豆:443 (菜鸟二级) | 2010-06-29 10:56
我要取出最大ID后,经过处理如:加上一串字符后使用的。
支持(0) 反对(0) ChineseCheng | 园豆:140 (初学一级) | 2010-06-30 16:36
0

楼上那些的自增有时可能不满足楼主的要求, 其实楼主可以通过,

另建一个表, 只有一列, 就是取这个ID的, 每次操作在这里加一行, 把值取出去.  这过程中的操作锁你要把握好, 不过数据量不大, 应该不会发生死锁.

然后再通过ID插入你真正的表.

风浪 | 园豆:2996 (老鸟四级) | 2010-06-29 11:37
0

可以这样先当一用户操作此表时可以先锁定此表,然后把此列的设置为自动增长列,利用max来获取就可以了,

邓大林 | 园豆:200 (初学一级) | 2010-06-29 12:24
0

查询和插入写在一个事物里就可以了。

eaglet | 园豆:17139 (专家六级) | 2010-06-29 12:35
我要取出最大ID后,经过处理如:加上一串字符后使用的。
支持(0) 反对(0) ChineseCheng | 园豆:140 (初学一级) | 2010-06-30 16:37
0

同意楼上

leon382 | 园豆:226 (菜鸟二级) | 2010-06-29 23:54
0

 select ident_current('tablename') as c

tablename是表名

c就是最大id

 

小侠客 | 园豆:120 (初学一级) | 2010-06-30 01:00
0

先把 SQL Server 表的 ID 设为自增 (Identity),接着 :

Int64 intMaxID = 0;

string strSql = "INSERT INTO myTable (c1, c2, c3) " +
                        "VALUES (@c1, @c2, @c3); SELECT @@identity;";

intMaxID = Convert.ToInt64(sqlCommand1.ExecuteScalar());

WizardWu | 园豆:1402 (小虾三级) | 2010-06-30 03:01
0

1、使用C#代码处理:

    在向该表中Insert的方法做锁定操作

  

Object thisLock = new Object();
lock (thisLock)
{
// Insert
}

 

2、通过Sql语句处理:

      在insert 语句前面 追加  Sql : " declare  @id int;select @id=max(id) from table; "

      insert 语句中的ID值 改成 @id 即可。

   如:string sql=" declare  @id int;select @id=max(id) from table;insert into users(id,name) values(@id,'可以使用')";

    

老虞 | 园豆:99 (初学一级) | 2010-07-13 20:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册