Sql server 2008 r2 费率自动递增

Sql server 2008 r2 费率自动递增,sql-server-2008-r2,Sql Server 2008 R2,我有两张桌子: 1篇博文: COLUMN_NAME DATA_TYPE Id int Title varchar Description varchar ImageName varchar FileName varchar CreatedDate datetime Tags varchar ModifiedDate datetime Ra

我有两张桌子:

1篇博文:

 COLUMN_NAME    DATA_TYPE
Id                  int
Title             varchar
Description       varchar
ImageName         varchar
FileName          varchar
CreatedDate       datetime
Tags              varchar
ModifiedDate      datetime
RateNumber           int
CreatedBy            int
ShortDescription    varchar
二,。博客评级:

Id  EmployeeId  PostId  Rate
4     1           12    3
5     1           13    2
6     1           11    2
ALTER PROCEDURE [dbo].[BlogRatingSave]
     @EmployeeId    int
    ,@PostId        int
    ,@Rate          int
AS
BEGIN
    DELETE FROM [HRM_BlogRating]
        WHERE   [HRM_BlogRating].[EmployeeId] = @EmployeeId 
            AND [HRM_BlogRating].[PostId] = @PostId 

    INSERT INTO [HRM_BlogRating]
        ([EmployeeId]
        ,[PostId]
        ,[Rate]
        )
    VALUES
        (@EmployeeId    
        ,@PostId        
        ,@Rate
        )
END
我编写了一个存储过程来保存BlogRating的详细信息:

Id  EmployeeId  PostId  Rate
4     1           12    3
5     1           13    2
6     1           11    2
ALTER PROCEDURE [dbo].[BlogRatingSave]
     @EmployeeId    int
    ,@PostId        int
    ,@Rate          int
AS
BEGIN
    DELETE FROM [HRM_BlogRating]
        WHERE   [HRM_BlogRating].[EmployeeId] = @EmployeeId 
            AND [HRM_BlogRating].[PostId] = @PostId 

    INSERT INTO [HRM_BlogRating]
        ([EmployeeId]
        ,[PostId]
        ,[Rate]
        )
    VALUES
        (@EmployeeId    
        ,@PostId        
        ,@Rate
        )
END

我想要的是,如果不同的员工给出费率,在保存BlogRating的同时,我需要用1自动增加表1中的字段RateNumber。同时,如果下次相同的员工费率,则费率编号不应增加。请帮我解决这个问题。

为什么要删除然后插入。相反,您应该尝试插入,如果由于重复而失败,则执行更新

在此过程中,您还可以调整评级的值,但我假设您需要传入做出更改的人员的EmployeeId,因为这是您规则的一部分。即

update BlogPost set RateNumber = RateNumber + 1 where EmployeeId = @EmployeeID and CreatedBy != @EmployeeID
因此,一切都将变成:

ALTER PROCEDURE [dbo].[BlogRatingSave]
     @EmployeeId    int
    ,@PostId        int
    ,@Rate          int
AS
BEGIN
    BEGIN TRY
        INSERT INTO [HRM_BlogRating]
            ([EmployeeId]
            ,[PostId]
            ,[Rate]
            )
        VALUES
            (@EmployeeId    
            ,@PostId        
            ,@Rate
            )
    END TRY
    BEGIN CATCH
        UPDATE [HRM_BlogRating]
             SET Rate = @Rate
        WHERE EmployeeID = @EmployeeID and PostId = @PostId
    END CATCH

    UPDATE BlogPost set RateNumber = RateNumber + 1 where EmployeeId = @EmployeeID and CreatedBy != @EmployeeID
END

我可以试试这个解决方案吗@迈克尔

ALTER PROCEDURE [dbo].[BlogRatingSave]
     @EmployeeId    int
    ,@PostId        int
    ,@Rate          int
AS
BEGIN
IF(EXISTS(SELECT 1 FROM [HRM_BlogRating] WHERE EmployeeId= @EmployeeId AND [PostId] = @PostId))
    BEGIN
        DELETE 
            FROM 
                [HRM_BlogRating]
        WHERE   
                [HRM_BlogRating].[EmployeeId]=@EmployeeId  
            AND 
                [HRM_BlogRating].[PostId] = @PostId 
    END
ELSE
    BEGIN
        UPDATE 
            HRM_BlogPost 
        SET 
            RateNumber=isnull(RateNumber,0)+1 
        WHERE 
            Id=@PostId
    END 

    INSERT INTO [HRM_BlogRating]
        ([EmployeeId]
        ,[PostId]
        ,[Rate]
        )
    VALUES
        (@EmployeeId    
        ,@PostId        
        ,@Rate
        )
END

我可以试试这个解决方案吗@MichaelThat没问题,但在您的示例中,选择加删除加更新比尝试插入要慢,而在我的示例中则是更新。我以为你也只想更新博客帖子,如果它是一个不同的雇员ID。