0

SQL Server 2008 r2 のカーソルに次のコードがあります。

begin 
    if exists (select * from GestionIOF with (updlock,serializable) where Fecha 
    =@fechagestion and ID_Desc2 = @id_tipoalarmas and ID_Modulo = @id_modulo)
    begin 
        update GestionIOF set Total = (Select Total from #Paso p where p.Fecha =   
        @fechagestion and p.Desc2 = @id_tipoalarmas and p.Modulo = @id_modulo), 
        Frecuencia = (Select Frecuencia from #Paso p where p.Fecha 
        = @fechagestion and p.Desc2 = @id_tipoalarmas 
        and p.Modulo = @id_modulo), Gestionado = 'False'
        where GestionIOF.Fecha = @fechagestion and GestionIOF.ID_Desc2 = 
        @id_tipoalarmas and GestionIOF.ID_Modulo = @id_modulo
    end
    else
    begin
        INSERT INTO GestionIOF(ID_Area,ID_Controlador ,ID_Modulo     
        ,ID_Desc2,ID_TipoEvento,Total,Frecuencia ,Fecha,Gestionado )
        SELECT * FROM #Paso 
    end

主キーが存在するかどうかを確認し、存在しない場合は挿入します。しかし、次のエラーが発生します。

Mens 2627, Nivel 14, Estado 1, Procedimiento InsertarGestionEC_IOF, Línea 67 Infracción de la restriction PRIMARY KEY 'PK_GestionIOF'. 'dbo.GestionIOF' のオブジェクトを複製する必要はありません。

多分それはバグです。何か案は?

4

1 に答える 1

3

@id_tipoalarmasexists 句はいくつかの入力パラメーターに基づいてチェックしてい@id_moduloますが、ステートメントの else 部分の挿入句は使用しています#paso

複数の行が含まれている可能性があるため、 の内容を再確認し#pasoますが、入力パラメーターは 1 セットの IDS にすぎません。#pasoチェックしていない他のIDが含まれている可能性があります。

于 2012-04-19T15:30:02.290 に答える