【发布时间】:2012-12-29 08:22:19
【问题描述】:
目前正在处理多租户应用程序,在存储过程中生成标识符时遇到问题。
我有一张这张表,里面有关于租户的元信息。
租户
TenantId
Name
IDPrefix, -->Like SFT
IDStart --> 000001
客户
TenantID
ClientIdentfier --> Like SFT000001
在存储过程中,我想生成下一个ClientIdentifier,例如SFT000002。
如何根据最后一个ClientIdentifier value + 1 做到这一点?
我知道下面的代码只取最后一个值。
select max(ClientID) + 1 from Client will give 1,2,etc
但我觉得我做不到
DECLARE @CIdentier Varchar(50);
select @CIdentier = select max(ClientIdentifier) + 1 from Client
to produce 'SFT000002
如何在存储过程中这样做?
编辑:
尝试了 mark_s 的答案,效果很好!!!
【问题讨论】:
-
之前在 SO.... 上被问过。
-
@MitchWheat 我可以得到那个 SO 链接吗?我搜索并失败了。
-
SELECT MAX(ClientID) + 1方法在负载下永远不安全 - 你会得到重复。 -
使用IDENTITY(1,1),如果需要生成像SFTxxxxxx这样的ID,可以从ID生成,并且可以避免重复
-
@marc_s 谢谢你的提示。但是有没有一种很好的方法可以在负载下做到这一点?该应用程序将被许多租户使用,因此,如果您添加更多点做,将会有所帮助
标签: sql sql-server sql-server-2008 stored-procedures