RateNumber的自动递增

时间:2012-07-09 07:00:15

标签: sql-server-2008-r2

我有两张桌子:

1)BlogPost:

 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

2。 BlogRating:

Id  EmployeeId  PostId  Rate
4     1           12    3
5     1           13    2
6     1           11    2

我编写了一个存储过程来保存BlogRating的详细信息:

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的同时我需要自动增加table1by中的字段RateNumber 1.同时,如果下次同一员工费率,则RateNumber不应该增加。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

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

在此过程中,您还可以调整评级的值,但我认为您需要传递进行更改的人员的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

答案 1 :(得分:0)

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

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
相关问题