2014-02-05 41 views
1

我想开发一个小型Winform软件C#,SQL Server 2008 R2可以在3台计算机上运行。如何获取并锁定下一个标识值SQL Server

我设计了一个INDENTITY type primay key(CusId)的“Customer_Master”表。

我想要的是,让我们说当我打开一个客户注册表单,然后程序应该显示下一个ID值。我可以通过使用SCOPE_IDENTITY()获得下一个身份值。 但在这种情况下,因为我使用的是集中式系统,如果所有计算机都试图同时创建一个新客户,它将在其注册表单中显示相同的密钥。但是,如果他们注册了新客户,注册的ID将与所显示的不同。

所以我想锁定下一个身份值注册客户的ID在窗体中显示。 如何做到这一点。有什么办法来管理并发插入。 我正在使用C#和SQL Server R2 Express。

请帮我解决这个问题。 在此先感谢。作为与INSERT执行判断下一序列

+3

为什么有要求告诉人们什么身份价值将提前? –

回答

1

你真的需要插入记录之前的ID ?如果不是,那么SCOPE_IDENTITY将正常工作。如果新记录的插入有效,那么SCOPE_IDENTITY将返回客户端插入的记录的id(不是任何其他客户端)。

如果你事先需要ID,那么你可以插入一个“存根”记录作为占位符,直到客户端写入“真实”客户记录。这样,在写实际数据之前,每个客户端本质上可以保留该ID。

但是,这不是一个好主意,因为它会导致表中的垃圾数据很多。

2

不使用的身份,你“想”什么是不可能用INT IDENTITY。你也不能“猜测”下一个数字是什么,因为有不能保证身份将是连续的。我不认为这是一个非常明智的决定,但是如果你真的需要这样做,那么你需要创建一个表来完成目的,以便按顺序递增并使用该值作为PK并从Customer_Master表中删除IDENTITY规范。

+0

谢谢..我不一定需要身份值。我只能使用非标识主键列。在那之后,做什么是我上面说的。 – Daybreaker