1

我创建了一个程序 ( sp_ET1_ClassificacaoPPIInferior) 来按分数 ( )对表 ( ) 中已经存在的候选人Numr_TotalEt1的特定类别 ( ) 进行排序:TipoPrograma = 1CandidatosVestAtual

CREATE TABLE [dbo].[CandidatosVestAtual](
[NUMG_Candidato] [bigint] NOT NULL,
[CODG_Curso] [varchar](4) NOT NULL,
[TipoPrograma] [int] NOT NULL,
[Numr_TotalEt1] [int] NULL,
[Numr_Classificacao_PPIInf_Et1] [int] NULL, 

    CONSTRAINT [PK_CandidatosVestAtual_1] PRIMARY KEY CLUSTERED ([NUMG_Candidato] ASC)
)

遵循使用的程序代码:

ALTER PROCEDURE [dbo].[sp_ET1_ClassificacaoPPIInferior] @CODG_Curso varchar(4)
AS

DECLARE @Cnt INT
DECLARE @NUMG_Candidato INT

    DECLARE Candidatos_C CURSOR FOR


    SELECT NUMG_Candidato
    FROM CandidatosVestAtual
    WHERE TipoPrograma in (1) AND 
    Codg_Curso =@CODG_Curso
    ORDER BY Numr_TotalEt1 DESC



    set @Cnt = 1
     OPEN Candidatos_C
     FETCH NEXT FROM Candidatos_C INTO @NUMG_Candidato
      WHILE (@@FETCH_STATUS = 0)
      BEGIN 


        UPDATE CandidatosVestAtual SET Numr_Classificacao_PPIInf_Et1=@Cnt
        FROM CandidatosVestAtual
        WHERE NUMG_Candidato=@NUMG_Candidato

        SET @Cnt = @Cnt + 1
        FETCH NEXT FROM Candidatos_C INTO @NumG_Candidato
      END

     CLOSE Candidatos_C
     DEALLOCATE Candidatos_C 

然而,这个过程没有做任何事情。仅当我更改原始查询过程时,它才做了一些事情:

SELECT NUMG_Candidato 
FROM CandidatosVestAtual 
WHERE TipoPrograma in (1) 
  AND Codg_Curso = @ CODG_Curso 
ORDER BY DESC Numr_TotalEt1

经过

SELECT NUMG_Candidato 
FROM CandidatosVestAtual 
WHERE Codg_Curso = @CODG_Curso 
ORDER BY DESC Numr_TotalEt1

如何使该过程与原始查询一起使用?

4

2 回答 2

0

我使用创建了一些虚假数据

declare @i int = 1
while @i <= 100
Begin
insert into [CandidatosVestAtual]
(NUMG_Candidato,
CODG_Curso,
TipoPrograma,
Numr_TotalEt1,
Numr_Classificacao_PPIInf_Et1)
select @I, 'a', 1, 1

end

当我运行程序时

[dbo].[sp_ET1_ClassificacaoPPIInferior] 'a'

Numr_Classificacao_PPIInf_Et1 中的数据完全递增。从触发器中删除更新并替换为

select @Cnt, @NUMG_Candidato

如果这增加了数据;您是否被困在事务回滚中?如果它不能你可以注释掉/修剪直到它工作并说出它再次开始工作的地方?

于 2012-12-11T18:08:34.993 回答
0

问题是 varchar 和 varchar(6),请检查您的 Proc peremeter 是 @CODG_Curso varchar(6) 并且表模式字段 def 是 [CODG_Curso] varchar NOT NULL..

于 2012-12-11T17:38:36.667 回答