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)