【问题标题】:How can we handle serial number for multiple users in a SQL Server table我们如何处理 SQL Server 表中多个用户的序列号
【发布时间】:2013-09-14 00:14:19
【问题描述】:

如何在SQL Server的一张表中管理多个用户同时进入records.net的序列号?

现在对于单用户,我阅读了最后一个序列号并将其显示在文本框中。它正在工作。如果 2 个用户同时插入一条记录,则会发生序列号重复错误。有什么解决办法?

【问题讨论】:

  • 序列号是人定的吗?序列号是整数吗?
  • 您遇到的错误是什么?听起来像是锁定问题...

标签: sql-server vb.net


【解决方案1】:

您可以使用身份列。 或者,如果您需要在写入数据库之前显示或使用 id,另一种技术是使用我所见过的称为“源表”的方法(尽管谷歌搜索该术语并没有找到任何结果)。本质上,您创建了一个存储过程,该过程访问一个包含当前 ID 的表中的一行; SP 在事务中检索并增加 id。这样每个 id 都是唯一的。在下面的示例 SQL 中,@whichid 用于定义我们要为哪个表请求新的 id; @n 是新的 id。

create PROCEDURE [dbo].[spGetUniqueID] 
@n int OUTPUT,@whichid int

AS

BEGIN TRAN
SELECT @n = val  FROM fount WHERE fountkey = @whichid
UPDATE fount SET val = @n + 1 WHERE fountkey = @whichid
COMMIT TRAN

RETURN

【讨论】:

  • 如果表包含最近分配的值,您可以使用奇怪的语法:update Fount set @N = Val += 1 where FountKey = @WhichId;
  • 整洁!我不知道你能做到!
  • 有点晦涩难懂的练习,但值得了解。更普遍有用的是OUTPUT 子句。它适用于 INSERTUPDATEDELETEMERGE 语句,处理多行,并提供对 beforeafter 值的访问(如适用) .
  • 谢谢,我知道了。我为标识符制作了一个单独的表,每个用户都从该表中获取序列号。
  • 是的,没错。 (它被称为“喷泉桌”,因为它应该像一个饮水机,每个流程都排着队喝一口)
猜你喜欢
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多