增加数据库中的记录位置(通过LINQ或SQL)

时间:2012-04-12 07:12:00

标签: sql sql-server linq tsql linq-to-sql

我有一个表(在SQL Server中),如:

UserId    CompanyId    UserName    Position
     1            1    John        1
     2            2    Adam        1
     3            2    Nick        2
     4            1    Mark        2
     5            3    Jack        1

UserId是具有自动增量的PK。 CompanyID是FK。位置只是用户(每家公司)的顺序计数器。

当为公司插入新用户记录(通过LINQ)时,我希望也增加位置。目前,我获得给定CompanyId的MAX + 1位置,然后将其分配给新记录。问题是并发插入操作通常会产生相同的位置值。

我尝试在插入触发器中增加位置以获得唯一性,但LINQ不会自动反映更新的值。

如何通过LINQ-to-SQL或直接作为TSQL查询来解决此问题?

感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

我可以告诉你有关TSQL查询的信息。 您可以使用 IDENT_CURRENT - 它会为您提供插入表的最后一个ID 。 如果这不是你想要的而不是尝试 - SCOPE_IDENTITY

答案 1 :(得分:0)

我的2美分:

begin transaction
    declare @v int
    select @v = isnull((select max(field2)+1 from t1), 1)
    insert into t1 (field2) values (@v)
commit transaction

-- just checking
select * from t1

答案 2 :(得分:0)

您可以在CompanyIDPosition上添加unique constraint以防止重复。

create table Users
(
  UserId int identity primary key,
  CompanyId int not null,
  UserName char(10) not null,
  Position int not null,
  unique(CompanyId, Position)
)

而不是重复,你得到一个例外,在你的代码中,你可以做一些事情,就像重试一样。