自动生成玩家编号

问题描述 投票:0回答:1

我想创建一个SSMS存储过程来自动生成玩家编号,例如000001,000002,000009,000010等。我希望当我点击前端的刷新时它应该自动生成

ALTER proc [SDS].[usp_autgennum]
AS
BEGIN
    declare @playernumber varchar(50)

    select '00000'+ cast(max(cast(substring('000001',6,100) as int)) + 1 as varchar)  as playernumber
    from SDS.tblPlayerList
END
sql sql-server stored-procedures auto-generate
1个回答
0
投票

不要尝试自己创建自动递增的数字。
这很容易出错,并且在 T-SQL 中几乎不可能正确执行。

相反,依靠 SQL Server 已经内置的功能来帮助您实现目标 - 使用

identity
列或
sequence
对象。

前导零是格式问题,应在显示中处理,而不是在数据库中处理。
但请注意,使用

identity
sequence
时,由于多种原因生成的数字可能存在间隙。
这不是一个错误,而是一个使这些自动递增数字能够正常工作的功能。

如果您需要数字连续且没有间隙,您可以使用基于

identity
sequence
的计算列来实现这一点,但请注意,如果在表本身上完成,它可能会带来性能损失.

如果您已经在使用存储过程,最简单也可能是最好的方法是添加一个

row_number()
列并按 id 对其进行排序(假设 id 是一个
identity
列) - 因此存储过程将是这样的:

ALTER proc [SDS].[usp_autgennum]
AS
BEGIN
    SELECT ROW_NUMBER() OVER(ORDER BY id) AS playernumber
      -- , whatever other columns you need here
    FROM SDS.tblPlayerList
END

如果你确实必须用前导零格式化结果,你可以这样做:

SELECT RIGHT('000000' + CAST(ROW_NUMBER() OVER(ORDER BY id) As varchar(6)), 6) AS playernumber
  -- , whatever other columns you need here
FROM SDS.tblPlayerList
© www.soinside.com 2019 - 2024. All rights reserved.