我有两张桌子:
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不应该增加。请帮我解决这个问题。
答案 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