Cav*_*rob 1 identity sql-server-2005 sequence
我真的在考虑切换SQL Server 2005中的Identity列并使用某种类型的序列生成器(据我所知,2005年没有内置任何内容;可能会在2011年出现?)以获得唯一的id用于插入的行.
是否有模型实施或最佳实践?我会遇到锁定问题吗?与仅使用Identity列相比,有哪些缺点?
是的,SQL 11有SEQUENCE对象,请参阅SQL Server v.Next(Denali):使用SEQUENCE.
可以创建手动序列,但不建议这样做.执行序列生成器的技巧是在序列表上使用UPDATE WITH OUTPUT.这是伪代码:
CREATE TABLE Sequences (
Name sysname not null primary key,
Sequence bigint not null default 0);
GO
CREATE PROCEDURE sp_getSequence
@name sysname,
@value bigint output
AS
UPDATE Sequences
SET Sequence = Sequence + 1
OUTPUT @value = INSERTED.Sequence
WHERE Name = @name;
GO
Run Code Online (Sandbox Code Playgroud)
我遗漏了一些细节,但这是一般的想法.但是,存在一个巨大的问题:任何请求序列上的下一个值的事务都将锁定该序列,直到它提交为止,因为它将对序列值进行更新锁定.这意味着在插入值时,所有事务都必须相互序列化,并且在实际生产部署中导致性能降低,这是无法忍受的.
我宁愿让你坚持使用IDENTITY类型.虽然并不完美,但它们远比你自己实现的要好得多.