在一个存储过程中更新和插入语句,只有一个有效

时间:2013-06-14 05:26:38

标签: .net sql insert-update

我有一张表,从中可以基本上不删除数据。 因此,每当我更新记录时,我都必须保留以前的记录并将新细节复制到新行中。 我为此创建了一个存储过程,它的作用是:

  1. 使用今天的日期更新以前的记录,以表明它已过期
  2. 将我传递给它的参数插入新行。
  3. 现在,当我在SQL Server 2008中执行此过程时,它会完美地显示2行受影响。 但是当我从我的程序(它的MVC应用程序)调用它时,只发生更新 - 没有插入。

    执行时没有错误或异常。 从ExecuteNonQuery()返回的行数为1。

    有没有人有任何想法,可能是什么问题?

    以下是正在做的事情

    ALTER PROCEDURE sp_ABC                              
    (
    @Primarykey int,
    @Desc varchar(2000),
    @Actor varchar(10),
    @txtCreatedBy char(6),
    @dtEfectiveEnd datetime                       
    )                              
    AS                              
    BEGIN 
    DECLARE @currentTime DATETIME, @intDeclarationID int
    SET @currentTime = GETDATE()
    
    SELECT @intDeclarationID = (MAX([intDeclarationId])+1) FROM tbl_ABC                      
    BEGIN TRY            
    UPDATE tbl_ABC                      
    SET [dtEffectiveEnd] = GETDATE()
        ,[txtLastModifiedBy] = @txtCreatedBy
        ,[dtLastModifiedBy] = GETDATE()                  
     WHERE intDeclarationId = @Primarykey 
    
    INSERT INTO tbl_ABC                      
           (
            [intDeclarationId]
           ,[txtDeclarationDesc]
           ,[txtActor]           
           ,[dtCreated]
           ,[txtCreatedBy]
           ,[dtLastModifiedBy]
           ,[txtLastModifiedBy]
           ,[dtEffectiveEnd]
               )                      
     VALUES                      
    (
    @intDeclarationID,
    @Desc,
    @Actor,
    @currentTime,
    @txtCreatedBy,
    @currentTime,
    @txtCreatedBy,
    @dtEfectiveEnd 
    )
    END TRY
    
    BEGIN CATCH
    SELECT ERROR_MESSAGE() AS ErrorMessage
    END CATCH
    END
    END
    GO
    

1 个答案:

答案 0 :(得分:0)

您能否提供存储过程的快照。问题不在代码中,而是在存储过程中,您不分离insert语句返回的结果和更新语句返回的结果。在这种情况下,您的SP会提供更好的主意。能否请你提供相同的。