如何将 nvarchar 值增加 1

How to increment nvarchar value by 1

我有一个table对用户信息的修改进行归档,其中主键是一个userid+具体用户信息下次修改的增量号。即用户 1234 的第一个密钥是 1234+000,随后对该用户信息的更改将在存档 table(用户 1234 的下一行)中显示为 1234+001。

所以我已经有了 table dbo.userchanges 用户 1234 的以下信息:

userkey, userid, usercntxt, usergroup
1234+000, 1234, lms, _default
1234+001, 1234, lms, _general_use

如果发现用户的userctxt变为'ils'则下一行为:

1234+002, 1234, ils, _general_use

我的问题是,我如何使用 TSQL 为该用户插入行 1234+002,或者如果 table 已经有 1234+00n,我通常如何插入 1234+00n+1?

如果字符串始终由 8 个字符组成,最后的 3 位数字要递增,那么您可以这样做:

left(userkey, 5) + format(convert(int, right(userkey, 3)) + 1, '00#')

想法是提取最后 3 个字符,转换为数字,递增,然后格式化回可能带有前导零的三位数字。

如果您希望 insert 查询通过“递增”其最后一个已知密钥来生成用户密钥,则:

insert into userchanges (userkey, userid, usercntxt, usergroup)
select coalesce(k.userkey, v.userid + '#000'), v.*
from (values (@userid, @usercntxt, @usergroup)) as v(userkey, userid, usercntxt, usergroup)
outer apply (
    select top (1) left(userkey, 5) + format(convert(int, right(userkey, 3)) + 1, '00#') userkey
    from userchanges u
    where u.userid = v.userid
    order by u.userkey desc
) k

如果用户在 table 中还没有行,则会生成一个新键,从索引 000 开始。