询问一个DBCC CHECKIDENT与事务的问题

jadesun 2012-08-14 11:15:34
背景:
有两张表 Test 10 与 Test 11。表的结构如下:
Test 10 有两个字段分别是: cniId (int,自增) ,cnvcUseName (varchar)
Test 11 有两个字段分别是: cniId (int,自增) ,cnvcUseName (varchar)
需求:
Test 11表的cnvcUserName字段的值,为 Test 10表当前 cniId字段 的值+1;

设计:
存储过程INSERT_TEST11:
   
BEGIN
DECLARE @nextId int;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
SELECT @nextId=IDENT_CURRENT( 'Test10' ) +1;
DBCC CHECKIDENT( 'Test10',RESEED, @nextId);
SELECT @nextId;
INSERT INTO Test11 (cnvcUseName) VALUES (@nextId);
COMMIT TRANSACTION;
END


存储过程INSERT_TEST10:

BEGIN
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
INSERT INTO Test10 (cnvcUseName) VALUES (GETDATE());
COMMIT TRANSACTION;
END


本意是通过事务进行表锁,在并发的情况下。不会出现
SELECT * FROM Test10 A JOIN Test11 B ON A.cniId = B.cnvcUseName; 的情况,结果在做压力测试时,的确出现了相同的值。

询问一下该方案存在问题的地方?

...全文
150 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
两种办法 一种是增加表的粒度,一种是修改隔离级别。
[/Quote]
锁的粒度。
--小F-- 2012-08-15
  • 打赏
  • 举报
回复
两种办法 一种是增加表的粒度,一种是修改隔离级别。
jadesun 2012-08-15
  • 打赏
  • 举报
回复
应该怎么处理呢?
筱筱澄 2012-08-14
  • 打赏
  • 举报
回复
你最后哪一个JOIN 没看懂

不知道你想测试上面,你这里的select 取值不指定锁是排除不掉并发的

有重复的@nextId 很正常。
不平衡电网下基于延时相消法(DSC)的T型三电平LCL逆变器(Simulink仿真实现)内容概要:本文详细介绍了在不平衡电网条件下,采用延时相消法(DSC)控制T型三电平LCL逆变器的设计与Simulink仿真实现。文章系统阐述了T型三电平逆变器的拓扑结构与工作原理,分析了其在高功率、低谐波应用中的优势。针对电网不平衡导致的负序分量问题,引入延时相消法进行正负序分离与控制,有效抑制了并网电流中的谐波分量,提升了电能质量和系统稳定性。文中给出了完整的控制策略设计,包括坐标变换、延时相消算法实现、双闭环控制系统(电流环与电压环)设计,并通过Simulink仿真验证了所提方法的有效性。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、微电网或电能质量相关研究的研究生及工程技术人员。; 使用场景及目标:①掌握T型三电平逆变器的工作原理与建模方法;②学习延时相消法(DSC)在不平衡电网条件下的正负序分离技术;③实现并网逆变器在复杂电网环境下的高性能控制仿真。; 阅读建议:本文以Simulink仿真实现为核心,建议读者结合文中的控制框图与算法描述,动手搭建仿真模型,通过调整电网不平衡度、负载等参数,观察并网电流波形与谐波含量的变化,以深入理解DSC控制策略的动态响应特性与鲁棒性。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧