sql-server – DB中用于生成主键的表?

您是否曾使用单独的表来“生成”DB的人工主键(以及为什么)?我的意思是拥有一个包含两列,表名和当前ID的表 – 通过简单地用该表名锁定行,获取键的当前值,增加它,您可以使用该表为某些表获取新的“ID”一个,解锁行.为什么您更喜欢这个超过标准整数标识列?

附: “想法”来自福勒斯企业应用架构模式,顺便说一下……

解决方法

这称为Hi / Lo分配.

你可以这样做,你的表上的INSERT触发器从这个表中获取ID,并在你获得你的ID之前或之后递增它,具体取决于你的选择.

当您必须处理多个数据库引擎时,通常会使用此方法. Oracle中的自动增量标识符是通过SEQUENCE,您可以在数据表的BEFORE INSERT TRIGGER中使用SEQUENCE.NEXTVALUE递增.

相反,sql Server具有IDENTITY列,本机自动增量,这由DBE本身管理.

为了使您的软件能够在两个DBE上工作,您必须达到某种标准,然后用于此的最常见的“标准”是对主键的Hi / Lo分配.

这是一种方法.目前,使用NHM的ORM Mapping工具,它通过配置提供,因此您需要更少的关注应用程序和数据库方面.

编辑#1

因为这种操作不能用于全局范围,所以每个数据库数据库模式都必须有这样的表.这样,每个模式都与另一个模式无关.但是,一个模式中的数据不能使用相同的密钥隐式地移向另一个模式,因为它可能与已存在的行冲突.

对于安全模式,它访问与另一个模式或用户相同的数据库,因此特定安全模式不应存在其他表.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...