我有一个表(在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查询来解决此问题?
感谢任何帮助。谢谢!
答案 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)
您可以在CompanyID
和Position
上添加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)
)
而不是重复,你得到一个例外,在你的代码中,你可以做一些事情,就像重试一样。