1

我有一个表(在 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,然后将其分配给新记录。问题是并发插入操作通常会导致相同的 Position 值。

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

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

任何帮助表示赞赏。谢谢!

4

3 回答 3

0

您可以在和上添加唯一约束以防止重复。 CompanyIDPosition

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

而不是重复,你会得到一个异常,在你的代码中你可以做一些事情,比如重试。

于 2012-04-18T15:20:50.257 回答
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
于 2012-04-18T13:36:04.113 回答
0

我可以告诉你有关 TSQL 查询的信息。您可以使用 IDENT_CURRENT - 它为您提供任何人插入表中的最后一个 id 。如果这不是你想要的,那就试试 - SCOPE_IDENTITY

于 2012-04-12T14:32:01.073 回答