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

我检查主键是否存在,如果不存在,我将其插入。但我收到以下错误:

男装 2627,Nivel 14,Estado 1,Procedimiento InsertarGestionEC_IOF,Línea 67 Infraccón de la restrictción PRIMARY KEY 'PK_GestionIOF'。没有 se puede insertar una clave duplicada en el objeto 'dbo.GestionIOF'。

也许这是一个错误。有任何想法吗?

4

1 回答 1

3

exists 子句正在根据一些输入参数进行检查,@id_tipoalarmas并且@id_modulo- 但语句 else 部分中的 insert 子句正在使用#paso

我会仔细检查其中的内容#paso,因为它可能有多行,但您的输入参数只是一组 IDS。#paso可能包含您未检查的其他 ID。

于 2012-04-19T15:30:02.290 回答