0

私は2つのテーブルを持っています:

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

2. ブログ評価:

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 を保存しているときに、table1 のフィールド RateNumber を 1 ずつ自動インクリメントする必要があるということです。これを解決するのを手伝ってください。

4

2 に答える 2

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
于 2012-07-09T08:45:16.463 に答える
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
于 2012-07-09T07:22:02.433 に答える