1

テーブル ( )に既にある候補者の特定のカテゴリ ( ) をsp_ET1_ClassificacaoPPIInferiorスコア ( ) でソートする手順 ( ) を作成しました。Numr_TotalEt1TipoPrograma = 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) であり、テーブル スキーマ フィールドの定義が [CODG_Curso] varchar NOT NULL であることを確認してください。

于 2012-12-11T17:38:36.667 に答える