把ID设置为自增就可以了.
每次插入完成后执行:SELECT @@IDENTITY;
需要插入前获取,设置一个自增INT列。插入前MAX这个列。
设置为自增就行.
如果不愿意设置为自增,可写个存储过程用于插入,插入前获取最大的id,
declare @tmp_id int
select @tmp_id=max(id)
from XXX
然后insert时利用此@tmp_id即可
楼上那些的自增有时可能不满足楼主的要求, 其实楼主可以通过,
另建一个表, 只有一列, 就是取这个ID的, 每次操作在这里加一行, 把值取出去. 这过程中的操作锁你要把握好, 不过数据量不大, 应该不会发生死锁.
然后再通过ID插入你真正的表.
可以这样先当一用户操作此表时可以先锁定此表,然后把此列的设置为自动增长列,利用max来获取就可以了,
查询和插入写在一个事物里就可以了。
同意楼上
select ident_current('tablename') as c
tablename是表名
c就是最大id
先把 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());
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,'可以使用')";