我想用一台运行在3台计算机上的SQL Server 2008 R2开发一个小型winform软件C#。
我使用INDENTITY type primay key(CusId)
设计了“Customer_Master”表。
我想要的是,当我打开客户注册表单时,程序应显示下一个id值。我可以使用SCOPE_IDENTITY()
获取下一个身份值。
但在这种情况下,当我使用集中式系统时,如果所有计算机同时尝试创建新客户,它将在其注册表单中显示相同的密钥。但如果他们注册了新客户,则注册的ID将与显示的内容不同。
所以我想锁定下一个标识值,用表格中显示的id注册Customer。 这该怎么做。有没有办法管理并发插入。 我正在使用C#和SQL Server R2 Express。
请帮我解决这个问题。 提前谢谢。
答案 0 :(得分:2)
不使用IDENTITY,INT IDENTITY无法实现“想要”,因为下一个序列被确定为INSERT已执行。您也无法“猜测”下一个数字是什么,因为无保证标识将是连续的。我不认为这是一个非常明智的决定,但是如果你真的想要这个,那么你需要创建一个表,其目的是按顺序递增并将该值用作PK,并从Customer_Master表中删除IDENTITY规范。
答案 1 :(得分:1)
在插入记录之前,您真的需要ID 吗?如果没有,那么SCOPE_IDENTITY将正常工作。如果新记录的插入有效,则SCOPE_IDENTITY将返回客户端插入的记录的id(而不是任何其他客户端)。
如果你做预先需要ID,那么你可以插入" stub"记录为占位符,直到客户端写入"真实"客户记录。通过这种方式,每个客户端在写入实际数据之前基本上可以保留ID。
然而,这不是一个好主意,因为它可能会导致表中出现大量垃圾数据。