使用uniqueidentifier还是IDENTITY生成主键?
2008-10-28 10:09:24 来源:WEB开发网问题
我正在设计一张表,并且决定创建一个自动生成主键值而不是创建自己的模式或者使用自然键。我知道SQL Server提供了全球唯一识别码(GUID),也提供了创建这些值的标识符。请问这些方法有哪些优缺点呢?
专家解答
确实,你可以通过很多种方法来为你的表自动生成主键值。最常见的一种方法是通过使用IDENTITY字段属性,或者指定带有默认NEWID() 或NEWSEQUENTIALID()函数的唯一识别码数据类型。此外,在SQL Server复制中,全球唯一识别码经常被用在带有更新订阅的合并复制或者事务复制的唯一识别符行中。
最常见也最知名的自动生成主键值的方法是通过在一个通常被声明为整数的字段上使用IDENTITY字段属性。一旦被定义之后,引擎就会根据在字段上声明好的属性来自动生成序列号。IDENTITY属性把原始的种子值当作它第一个参数,把增量值当作它第二个参数值。
看看下面的例子,它创建并且插入到基于标识符的表中,这些表把主键定义为聚集索引:
SETNOCOUNTON
GO
USEMASTER
GO
CREATEDATABASEMSSQLTIPS
GO
USEMSSQLTIPS
GO
--Startat1andincrementby1
CREATETABLEIDENTITY_TEST1
(
IDINTIDENTITY(1,1)PRIMARYKEY,
TESTCOLUMNCHAR(2000)DEFAULTREPLICATE('X',2000)
)
GO
--Startat10andincrementby10
CREATETABLEIDENTITY_TEST2
(
IDINTIDENTITY(10,10)PRIMARYKEY,
TESTCOLUMNCHAR(2000)DEFAULTREPLICATE('X',2000)
)
GO
--Startat1000andincrementby5
CREATETABLEIDENTITY_TEST3
(
IDINTIDENTITY(1000,5)PRIMARYKEY,
TESTCOLUMNCHAR(2000)DEFAULTREPLICATE('X',2000)
)
GO
--INSERT1000ROWSINTOEACHTESTTABLE
DECLARE@COUNTERINT
SET@COUNTER=1
WHILE(@COUNTER<=1000)
BEGIN
INSERTINTOIDENTITY_TEST1DEFAULTVALUES
INSERTINTOIDENTITY_TEST2DEFAULTVALUES
INSERTINTOIDENTITY_TEST3DEFAULTVALUES
SET@COUNTER=@COUNTER+1
END
GO
SELECTTOP3IDFROMIDENTITY_TEST1
SELECTTOP3IDFROMIDENTITY_TEST2
SELECTTOP3IDFROMIDENTITY_TEST3
GO
Tags:使用 uniqueidentifier 还是
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接