• 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' 中的标识列插入显式值。”

  • 相关阅读:
    2019年第九周作业
    2019年春第八周作业
    2019年春第七周作业
    2019春第六周作业
    2019年春季学期第五周作业
    2019年春季学期第四周作业
    2019年春季学期第三周作业 ----PTA作业
    2019年春季学期第三周作业
    2019春第七周作业
    第五周作业
  • 原文地址:https://www.cnblogs.com/encore620/p/2657883.html
Copyright © 2020-2023  润新知