场景:我有一个相当通用的表(数据),它具有标识列。该表中的数据被分组(可以按城市说)。如何创建唯一的用户密钥
用户需要一个标识符才能在纸张表格上打印等。 用户只能访问他们的引用数据,所以如果他们使用标识列来达到这个目的,他们会看到奇数(例如'纽约“用户可能会看到1,37,2028 ......所列出的键。
Idealy他们会看到1,2,3 ...(或类似的东西)
当然,问题是并发性,这作为一个Web应用程序,你不能只是有这样的: UserId =从数据选择计数(*)+ 1在哪里城市='纽约'
有没有人想出解决这个问题的任何狡猾的方法?
更新 - 从下面的评论我想我想要的东西像下面的SP。不完全确定递归如何在CATCH块中起作用。
ALTER PROCEDURE [dbo].[DataContainer_Insert]
@SomeData varchar(max),
@DataContainerId int out
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRY
SELECT @UserId = MAX(UserId) From DataContainer
INSERT INTO DataContainer (UserId, SomeData)
VALUES (@UserId, SomeData)
SELECT @DataContainerId = scope_identity()
END TRY
BEGIN CATCH
--try again
exec DataContainer_Insert @DataContainerId, @SomeData
END CATCH
END
您是否需要确实能够稍后查看此ID,还是纯粹用于显示(打印)目的? – Aaronaught 2010-05-12 21:56:41
我需要稍后查找此ID。我现在添加了一些示例代码。 – 2010-05-20 23:35:49