Sql server 2008 r2 费率自动递增
我有两张桌子: 1篇博文: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
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。