SQL Server 的 主键 解决方案 NEWID() , 自增ID

在 SQL Server 表的主键有自增Id ,和  GUID。

  1.  自增Id

    优点:索引空间小,索引连续。在大量数据插入的时候性能有特别大的优势。

    缺点:可移植性差,在数据迁移的时候。

  2. GUID

    优点:数据迁移的时候很容易。

    缺点:索引占用空间大,因为GUID的随机性,在插入数据的时候会导致索引上的页争用。

 

SQL SERVER 2005新加了 NEWSEQUENTIALID(),这是个内置函数,不能用与 SELECT 

-- 创建的表加约束 default newsequentialid()
create table #t
(
    id uniqueidentifier not null  default newsequentialid()
    ,name varchar(100)
)
go

--插入表100条数据,并且要指定列名
insert into #t(name) values('a')
go 100

select * from #t

查询结果:

    

 

如果这个表的值要被其他表作为外键使用,获得这个值有两中方法:

  1、SQL Server 2005添加的新特性 OUTPUT

insert into #t(name) 
output inserted.id 
values('a')

  2、也可以像插入自增Id一样,获取当前最大的值,

    MSDN对NEWSEQUENTIALID()解释:在指定计算机上创建大于先前通过该函数生成的任何 GUID 的 GUID。

insert into #t(name) values('a')
select max(id) from #t

 

 https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2005/ms189786(v=sql.90)

posted on 2018-04-12 12:52  王占波  阅读(6300)  评论(0编辑  收藏  举报

导航