2013-01-18 18 views
0

嗨我从.net代码调用存储过程。存储过程正在根据.net代码发送的参数计算某些值。计算出某些值后,将在存储过程结束时执行对同一个表的三条Insert语句。我发现有时这些插入语句不会在表中插入记录。这很奇怪,因为我彻底检查了存储过程被正确调用并且参数也被发送。当只有一个线程运行时,问题不会出现。只有在我运行9个多线程并行访问相同存储过程的情况下。通过存储过程执行的插入语句导致间歇性故障的多个线程

请建议是否需要检查某些设置或缺少某些设置。

我怀疑可能会出现死锁情况并阻止插入。但我不确定。我还检查了表中索引中的allow_row_locks和allow_page_locks,并将它们设置为'ON';

回答

0

我会说你的代码正在生成相同的值插入,从而违反了表的约束。

表中有主键还是唯一键?也许有一些检查表中的触发器可能导致这种情况?

+0

嗨乔治我有1个PKEY不能为NULL,且应该是唯一的..我用一个函数生成PKEY每个插入被调用时.. CREATE FUNCTION [功能1](@ inValue [为nvarchar(4000 )) 返回[为nvarchar(16)EXECUTE AS CALLER GO 调用从插入语句功能1( '001')的功能 这应该生成唯一的16位数字为nvarchar每次..你认为这可能导致任何问题? – Sourav

+0

Hi Sourav, 我不知道生成PKEY函数背后的逻辑,但我肯定会怀疑它是导致你的问题。 如果它产生不同的独特结果,这意味着你在里面使用某种随机化。它与系统的时间有关吗?如果这样,你应该在生成唯一的响应之前添加一些延迟,因为完全有可能在同一时刻执行该功能。 如果它与其他一些事物有关(例如普通的随机),那么它本身就是危险的。 – GeorgeVremescu

+0

嗨乔治,谢谢你的输入。我仍在检查那个PKey字段。我也觉得这PKey是造成这个问题。但是仍然在测试和尝试纠正它的方法。解决后再次发布。万分感谢。 :) – Sourav