2017-03-02 42 views
1

我有一個情況的問題時,許多用戶插入一條記錄在同一時間的數據庫,並在列scope_id有重複值。 有沒有辦法保護價值的重複?如何保護通過SCOPE_IDENTITY相同值的分配()?

@scope_id = SCOPE_IDENTITY() 

我想過一個觸發器,但也許是一個簡單的解決方案。(檢查前,該ID是在數據庫中並不總是有效。)

+0

聲明該列爲'identity',讓sql-server設置值。 – Serg

+0

@Serg我不想使用標識,因爲此列與另一個錶鏈接。 –

+1

檢查此:http://stackoverflow.com/questions/1920558/what-is-the-difference-between-scope-identity-identity-identity-and-ide –

回答

1

您正在尋找可以利用達到什麼T-SQL功能NEWSEQUENTIALID。這會生成順序的全局唯一標識符以存儲在UNIQUEIDENTIFIER類型的屬性中。的GUID保證是跨越時間和空間的獨特

它可以在申報表以及例如時使用:

CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID()) 
2

如果您正在使用SQL Server 12+我會建議取SEQUENCE對象(MSDN reference)的優點。

創建序列:從上面的參考

示例代碼

CREATE SEQUENCE Test.CountBy1 
    START WITH 1 
    INCREMENT BY 1 ; 
GO 

使用它:

DECLARE @NextID int ; 
SET @NextID = NEXT VALUE FOR Test.CountBy1; 
-- Some work happens 
INSERT Test.Orders (OrderID, Name, Qty) 
    VALUES (@NextID, 'Rim', 2) ; 
GO 

NEXT VALUE聲明甚至嘗試之前消耗序列的下一個值插入一條記錄。

+0

我應該說這' - 有些工作happens'看上去很恐怖。他們最好說' - 一些謹慎的程序化工作正在發生。 – Serg