如何通过SCOPE_IDENTITY()保护相同值的赋值?

时间:2017-03-02 07:31:36

标签: sql sql-server tsql

我遇到许多用户同时在数据库中插入记录并且在列scope_id中存在重复值的情况。 有没有办法保护价值重复?

@scope_id = SCOPE_IDENTITY()

我考虑过一个触发器,但也许是一个更简单的解决方案。(在该数据库之前检查该ID并不总是有效。)

2 个答案:

答案 0 :(得分:2)

如果您使用的是SQL Server 12+,我建议您利用cordova.plugins.Keyboard.hideKeyboardAccessoryBar(false);对象(MSDN reference)。

以上参考文献中的示例代码:

创建序列:

SEQUENCE

使用它:

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 语句在尝试插入记录之前会消耗序列的下一个值。

答案 1 :(得分:1)

您可以通过使用T-SQL函数NEWSEQUENTIALID来实现。这将生成顺序全局唯一标识符,以存储在UNIQUEIDENTIFIER类型的属性中。 GUID保证在空间和时间上是唯一的

它也可以在声明表格时使用例如:

CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID())