場景:我有一個相當通用的表(數據),它具有標識列。該表中的數據被分組(可以按城市說)。如何創建唯一的用戶密鑰
用戶需要一個標識符才能在紙張表格上打印等。 用戶只能訪問他們的引用數據,所以如果他們使用標識列來達到這個目的,他們會看到奇數(例如'紐約「用戶可能會看到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