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)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM