sql2000中,临时表循环插入数据需要指定插入列,否则会报错

USE [hdykxin]

GO



/****** Object:  StoredProcedure [dbo].[pro_StudentExamScores]    Script Date: 08/27/2012 00:13:44 ******/

SET ANSI_NULLS ON

GO



SET QUOTED_IDENTIFIER ON

GO





-- =============================================

-- Author:		<Author,,Name>

-- Create date: <Create Date,,>

-- Description:	<Description,,>

-- =============================================

CREATE PROCEDURE [dbo].[pro_StudentExamScores] 

	-- Add the parameters for the stored procedure here

	@examId int --传入考试ID

AS

BEGIN

	set nocount on

	begin transaction

	declare @courses varchar(100), --班级定义考试课程列表

		    @index int,--当前下标

		    @activeCourse int, --当前课程

		    @length int, --字符串长度

		    @resultAction int --返回操作结果 1:成功 0:失败

	

	select @courses=[class].coursePlan from h_kscj_exam exam

	left join h_jxgl_ClassInfo [class] on exam.classid=[class].Id

	where exam.id=@examId

	select @length=LEN(@courses) --初始化LENGTH

	if @length is not null and @length>0

	begin

		

		select @index=CHARINDEX(',',@courses) --初始化INDEX

		while @index>0

		begin

			select @activeCourse=SUBSTRING(@courses,1,@index-1)--取得课程

			select @courses=SUBSTRING(@courses,@index+1,@length)--去掉已经取得的课程

			select @index=CHARINDEX(',',@courses)--更新index

			

			--计算科目排名,并记录入数据库

			if @activeCourse>0

			begin

				create table #scoreTable  --创建临时表#scoreTable 用来进行排名

				(

					ID   int IDENTITY (1,1) PRIMARY KEY  not null, -- 排名

					ScoreId int --考试科目成绩ID

				);

				

				

				insert into #scoreTable(ScoreId) 

				select cj.id as ScoreId

				from h_kscj_cjRecords cj

				left join h_jxgl_kcManage kc on cj.SubjectId=kc.Id

				where SubjectId=@activeCourse and ExamId=@examId

				order by Score desc

				

				--每次插入数据之后删除临时表,保证排名从1开始

				insert into h_kscj_examRanking

				select ScoreId,ID from #scoreTable

				drop table #scoreTable

				

			end

			

		end

		--总分数排名

		create table #SumscoreTable  --创建临时表#scoreTable 用来进行排名

				(

					ID   int IDENTITY (1,1)     not null, -- 排名

					ScoreId int --考试科目成绩ID

				);

				

				insert into #SumscoreTable(ScoreId) 

				select cj.id as ScoreId

				from h_kscj_cjRecords cj

				left join h_jxgl_kcManage kc on cj.SubjectId=kc.Id

				where SubjectId=0 and ExamId=@examId

				order by Score desc

				

				--每次插入数据之后删除临时表,保证排名从1开始

				insert into h_kscj_examRanking

				select ScoreId,ID from #SumscoreTable

				drop table #SumscoreTable

				

	end

	

	if(@@error>0)

		begin 

		select @resultAction=0

		rollback transaction

		end

	else

		begin 

		select @resultAction=1

		commit transaction

		end

	

    -- 最后的查询结果

	select @resultAction as result

END





GO

  结果会导致错误:“当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'products' 中的标识列插入显式值。”

你可能感兴趣的:(sql2000)