我在sql server management studio中遇到了newsequentialid()学习问题。创建一个具有唯一标识符列'UniqueID‘的表,并将默认值设置为newsequentialid()。
步骤1.保存设计:
'Table_1‘表-验证列'UniqueID’的默认值时出错。
无论如何,请保存它。
步骤2.查看sql:
CREATE TABLE [dbo].[Table_1](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[UniqueID] [uniqueidentifier] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Table_1] ADD CONSTRAINT [DF_Table_1_UniqueID] DEFAULT (newsequentialid()) FOR [UniqueID]
GO看起来很合理。
步骤3.添加一些行:
1 test 72b48f77-0e26-de11-acd4-001bfc39ff92
2 test2 92f0fc8f-0e26-de11-acd4-001bfc39ff92
3 test3 122aa19b-0e26-de11-acd4-001bfc39ff92它们看起来不是很连续。??
编辑:如果所有的插入都是一次完成的,那么唯一的id是顺序的,我已经让它在某种程度上工作了。在以后的插入中,sql server似乎忘记了最后一个连续的id,并开始了一个新的序列。
在ssms中运行此命令会导致序列guids:
insert into Table_1 (Name) values('test13a');
insert into Table_1 (Name) values('test14a');
insert into Table_1 (Name) values('test15a');
insert into Table_1 (Name) values('test16a');
insert into Table_1 (Name) values('test17a');发布于 2009-04-10 20:58:29
newsequentialid主要是为了解决当您的表由唯一标识符聚类时的页面碎片问题。您的表由一个整数列组成群集。我设置了两个测试表,一个是newsequentialid列是主键,另一个不是(和您的一样),并且在主键中GUID始终是连续的。在另一种情况下,他们不是。
我不知道它为什么会有这种行为的内部原因/技术原因,但似乎很明显,newsequentialid()只有在表被它聚集时才是真正连续的。除此之外,它的行为看起来类似于newid() / RowGuid。
另外,我很好奇为什么你会想要使用newsequentialid(),而你不需要这样做。它有许多newid()没有的缺点,也没有任何好处-最大的缺点是newid()不可预测,而newsequentialid()则是。如果你不担心碎片化,那还有什么意义呢?
发布于 2012-05-03 20:20:15
根据NEWSEQUENTIALID()的the definition,这些值实际上是“连续的”:
创建的GUID大于自Windows启动以来此函数在指定计算机上以前生成的任何GUID。
它并不是说在GUID中不能有任何间隙,只是任何新的GUID都应该大于以前的GUID。
试试这个:
create table #test(id int, txt varchar(50), gid uniqueidentifier)
insert into #test
select 1 ,'test','72b48f77-0e26-de11-acd4-001bfc39ff92'
union select 2, 'test2', '92f0fc8f-0e26-de11-acd4-001bfc39ff92'
union select 3, 'test3', '122aa19b-0e26-de11-acd4-001bfc39ff92'
select * from #test
order by gid asc如您所见,记录的顺序为1、2、3,这与预期不谋而合。
发布于 2013-12-21 01:12:28
它们是连续的!
1 test 72b48f77-0e26-de11-acd4-001bfc39ff92
2 test2 92f0fc8f-0e26-de11-acd4-001bfc39ff92
3 test3 122aa19b-0e26-de11-acd4-001bfc39ff9277 < 8f < 9b!你必须看到最高的值,而不是最低的(从右到左)
https://stackoverflow.com/questions/738801
复制相似问题