sql server主键有多种选取的方式,下面为您详解采用手动增长型字段选取sql server主键的方式,供您参考,希望对您有所启迪。
既然自动增长型字段会带来如此的麻烦,我们不妨考虑使用手动增长型的字段,也就是说sql server主键的值需要自己维护,通常情况下需要建立一张单独的表存储当前sql server主键键值。还用上面的例子来说,这次我们新建一张表叫IntKey,包含两个字段,KeyName以及KeyValue。就像一个HashTable,给一个 KeyName,就可以知道目前的KeyValue是什么,然后手工实现键值数据递增。在SQL Server中可以编写这样一个存储过程,让取键值的过程自动进行。代码如下:
- CREATE PROCEDURE [GetKey]@KeyName char(10),
- @KeyValue int OUTPUT
- AS
- UPDATE IntKey SET @KeyValueKeyValue = KeyValue =
- KeyValue + 1 WHERE KeyName = @KeyName
- GO
这样,通过调用存储过程,我们可以获得最新键值,确保不会出现重复。若将OrderID字段设置为手动增长型字段,我们的程序可以由以下几步来实现:首先调用存储过程,获得一个OrderID,然后使用这个OrderID填充Order表与OrderDetail表,最后在事务保护下对两表进行更新。
使用手动增长型字段作为sql server主键在进行数据库间数据复制时,可以确保数据合并过程中不会出现键值冲突,只要我们为不同的数据库分配不同的主键取值段就行了。但是,使用手动增长型字段会增加网络的RoundTrip,我们必须通过增加一次数据库访问来获取当前主键键值,这会增加网络和数据库的负载,当处于一个低速或断开的网络环境中时,这种做法会有很大的弊端。同时,手工维护主键还要考虑并发冲突等种种因素,这更会增加系统的复杂程度。
【编辑推荐】