栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL Server:与Oracle中的RowVersion等效

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL Server:与Oracle中的RowVersion等效

简单的答案是“否”-但是使用NUMBER列和设置/更新它的触发器来创建自己很容易。

Oracle 11gR2的一个简单示例:

CREATE SEQUENCE global_rowversion_seq;ALTER TABLE mytable1 ADD rowversion NUMBER;ALTER TABLE mytable2 ADD rowversion NUMBER;CREATE TRIGGER mytable1_biu   BEFORE INSERT OR UPDATe   ON mytable1   FOR EACH ROWBEGIN  :NEW.rowversion := global_rowversion_seq.NEXTVAL;END mytable1_biu;CREATE TRIGGER mytable2_biu  BEFORE INSERT OR UPDATE  ON mytable2  FOR EACH ROWBEGIN  :NEW.rowversion := global_rowversion_seq.NEXTVAL;END mytable2_biu;

(如果您使用的是较早的Oracle版本,则触发器中的分配必须通过查询来完成,例如:

  SELECT global_rowversion_seq.NEXTVAL  INTO :NEW.rowversion  FROM dual;

现在,请记住,在某些情况下,由于所有使用相同序列进行数据库插入/更新的争用,该设计在极端情况下(例如,具有极高插入/更新活动的数据库)可能会对性能产生影响。当然,在这种情况下,您可能首先会避免触发。

根据您使用rowversion列的方式,最好对每个表使用单独的序列。当然,这意味着行版本将不再是全局唯一的-
但是,如果您仅对比较表中行的更改感兴趣,那么就可以了。

另一种方法是分别为每一行增加计数器-这不需要序列,并且允许您检测到行的更改(但不允许将任何行与另一行进行比较):

ALTER TABLE mytable ADD rowversion NUMBER;CREATE TRIGGER mytable_biu  BEFORE INSERT OR UPDATE  ON mytable  FOR EACH ROWBEGIN  :NEW.rowversion := NVL(:OLD.rowversion, 0) + 1;END mytable_biu;

每行将以rowversion = 1插入,然后对该行的后续更新会将其递增为2、3,依此类推。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574911.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号