我分别有三个表和三个存储过程来插入/更新这些表中的记录。第一个表有一个主键列RecNo,它是自动生成的。
大约1000名用户同时从不同的地理位置输入这些表中的记录。我注意到,即使成功完成插入并且没有生成警告,有时在第二个或第三个表中的插入也会丢失。
我想知道自动生成的主键列如何处理并发问题。我是否需要在每个存储过程的顶部将隔离级别设置为SERIALIZABLE?
我正在使用具有默认隔离级别的SQL Server 2008 R2 Express,即READ COMMITTED。
我的一个存储过程如下:
ALTER PROCEDURE [dbo].[pheSch_CreateOrUpdateTubewellDetails]
-- Add the parameters for the stored procedure here
@TwTaskFlag nvarchar(6),
@TwParameterID bigint,
@SerialNumber bigint,
@TotalNum int,
@TwType nvarchar(50),
@Depth nvarchar(60),
@Diameter nvarchar(60),
@WaterCapacity nvarchar(60),
@PS nvarchar(15),
@PSNum int,
@PSType nvarchar(60),
@Remarks nvarchar(80)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
BEGIN
UPDATE tw_details
SET
TotalNum = @TotalNum,
TwType = @TwType,
Depth = @Depth,
Diameter = @Diameter,
WaterCapacity = @WaterCapacity,
PS = @PS,
PSNum = @PSNum,
PSType = @PSType,
Remarks = @Remarks
WHERE twpid = @TwParameterID;
END
END
答案 0 :(得分:0)
您无需更改隔离级别, Identity列非常适合并发插入。
如果强>
你没有附加任何触发器 - 然后显示所有细节
<强> BUT 强>
你注意到了INSERTS - 我在这里看不到任何一个