gpt4 book ai didi

sql - 生成唯一的批处理 ID (SQL Server)

转载 作者:行者123 更新时间:2023-12-02 06:27:53 25 4
gpt4 key购买 nike

这可能是 1x 中的 2x 问题。很抱歉,但这里是:

问题

每当用户将一些数据上传到 SQL Server 时,我都会创建一个唯一的批处理 ID。目前,我通过查看“身份规范”的最后一个值并向其添加 +1 来执行此操作。

问题出现了,正如您可能已经猜到的那样,如果多个用户同时输入数据,他们都会得到相同的批处理 ID...

可能的解决方案

为了缓解这个问题,我想出了这个方法来生成3个字母+随机数;和(最后一个 id 值 + 1):

DECLARE @tmp CHAR(3) = CHAR(CAST(RAND()*26 AS int)+65) + CHAR(CAST(RAND()*26 AS int)+65) + CHAR(CAST(RAND()*26 AS int)+65);
SELECT @tmp;

select cast(RAND()*9999 as int)

(1) 我不确定如何将其连接成一行字符串。

(2) 另一个问题,有没有一种方法可以 100% 保证每个用户在每次提交请求时都得到一个唯一的批处理 ID,而不管有多少人同时在做?

非常感谢您对此的投入。

最佳答案

1 - 连接部分非常简单,您可以执行以下操作:

DECLARE @tmp VARCHAR(10); 

SET @tmp = CHAR(CAST(RAND()*26 AS int)+65)
+ CHAR(CAST(RAND()*26 AS int)+65)
+ CHAR(CAST(RAND()*26 AS int)+65)
+ CAST(cast(RAND()*9999 as int) AS VARCHAR(4));

SELECT @tmp;

2 - 我建议用您想要发布给用户的随机值填充一个表,然后从中选择,以避免竞争条件。

创建一个名为 BatchNumbers 的表,其中包含两列 BatchNumberUsed

填充批号表并将 0 作为已用列的默认值。

然后每次您需要批号时,请执行以下操作。

CREATE PROC dbo.usp_Get_BatchNumber
@BatchNumber VARCHAR(10) OUTPUT
AS
BEGIN
SET NOCOUNT ON;

Declare @t TABLE (BN VARCHAR(10));

UPDATE TOP (1) BatchNumbers
SET Used = 1
OUTPUT inserted.BatchNumber INTO @t (BN )
WHERE Used = 0;

SELECT @BatchNumber = BN FROM @t;

END

关于sql - 生成唯一的批处理 ID (SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51249300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com