怎样解决用户并发数据
有什么办法处理这个存储过程并发吗!
要1个1个的来!!
比如30个人同时执行这个某存储过程
等这个存储过程处理完毕,
下1个人再次接着执行
下面是个同时提交考题的1个存储过程!!!!
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <feifan>
-- Create date: <20008-10-15>
-- Description: <学生答题入库-写表:ot_paper,ot_TestResult>
-- =============================================
ALTER PROCEDURE [dbo].[st_TestTotalInfo_add]
@paperid INT ,
@studentid VARCHAR(11) ,
@serial VARCHAR(20) ,
@ip VARCHAR(20) ,
@ret INT OUTPUT
AS
BEGIN
SET NOCOUNT ON ;
SET @ret = 1
--检测TEMP表的中的题目数和试卷的试题数是不是相等,不相等就退出
DECLARE @qnum INT ,
@Answernum INT
SELECT @qnum = COUNT(id)
FROM ot_question
WHERE paperid = @paperid AND stauts = 0 --试卷的试题数
SELECT @answernum = COUNT(1)
FROM AnswerTemp.dbo.ot_AnswerRecordsTemp
WHERE studentid = @studentid AND paperid = @paperid AND serial = @serial
IF @qnum <> @answernum
BEGIN
SET @ret = 4 --试题数不相等
RETURN
END
-- begin tran--开始事务
--插入答题记录表*******************
INSERT INTO ot_AnswerRecords_new ( questionid,qoption,qscore,paperid,studentid,addtime,serial )
SELECT questionid,qoption,qscore,paperid,studentid,addtime,serial
FROM AnswerTemp.dbo.ot_AnswerRecordsTemp
WHERE studentid = @studentid AND paperid = @paperid AND serial = @serial
--记录试题分数和答题人数
UPDATE ot_paperquestion
SET test_num = a.test_num + 1,total_score = a.total_score + b.qscore
FROM ot_paperquestion a ,
dbo.ot_AnswerRecords_new b
WHERE b.studentid = @studentid AND b.paperid = @paperid AND serial = @serial AND a.paper_id = b.paperid AND a.question_id = b.questionid
DECLARE @myscore FLOAT
SELECT @myscore = SUM(qscore)
FROM AnswerTemp.dbo.ot_AnswerRecordsTemp
WHERE studentid = @studentid AND paperid = @paperid AND serial = @serial
IF @myscore > 100
SET @myscore = 100
--更新试卷答题次数和部分
UPDATE dbo.ot_paper
SET test_num = test_num + 1,total_score = total_score + @myscore
WHERE id = @paperid
--删除临时记录表
DELETE FROM AnswerTemp.dbo.ot_AnswerRecordsTemp
WHERE studentid = @studentid AND paperid = @paperid AND serial = @serial
--更新分数
UPDATE dbo.ot_TestResult
SET end_date = GETDATE(),test_score = @myscore
WHERE studentid = @studentid AND paperid = @paperid AND serial = @serial
DECLARE @reward INT --为积分赋值
SET @reward = CASE WHEN @myscore > 0 AND @myscore < 60 THEN 50
WHEN @myscore >= 60 AND @myscore < 70 THEN 70
WHEN @myscore >= 70 AND @myscore < 80 THEN 100
WHEN @myscore >= 80 AND @myscore < 90 THEN 150
WHEN @myscore >= 90 AND @myscore < 95 THEN 200
WHEN @myscore >= 95 AND @myscore < 100 THEN 260
WHEN @myscore = 100 THEN 300
END
--更新用户帐户表的经