我有一個情況的問題時,許多用戶插入一條記錄在同一時間的數據庫,並在列scope_id有重複值。 有沒有辦法保護價值的重複?如何保護通過SCOPE_IDENTITY相同值的分配()?
@scope_id = SCOPE_IDENTITY()
我想過一個觸發器,但也許是一個簡單的解決方案。(檢查前,該ID是在數據庫中並不總是有效。)
我有一個情況的問題時,許多用戶插入一條記錄在同一時間的數據庫,並在列scope_id有重複值。 有沒有辦法保護價值的重複?如何保護通過SCOPE_IDENTITY相同值的分配()?
@scope_id = SCOPE_IDENTITY()
我想過一個觸發器,但也許是一個簡單的解決方案。(檢查前,該ID是在數據庫中並不總是有效。)
您正在尋找可以利用達到什麼T-SQL功能NEWSEQUENTIALID
。這會生成順序的全局唯一標識符以存儲在UNIQUEIDENTIFIER類型的屬性中。的GUID保證是跨越時間和空間的獨特
它可以在申報表以及例如時使用:
CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID())
如果您正在使用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
聲明甚至嘗試之前消耗序列的下一個值插入一條記錄。
我應該說這' - 有些工作happens'看上去很恐怖。他們最好說' - 一些謹慎的程序化工作正在發生。 – Serg
聲明該列爲'identity',讓sql-server設置值。 – Serg
@Serg我不想使用標識,因爲此列與另一個錶鏈接。 –
檢查此:http://stackoverflow.com/questions/1920558/what-is-the-difference-between-scope-identity-identity-identity-and-ide –