下列是通过“dmv”找出来的一条“查询显示缓存计划所占用的 CPU 总使用率”的存储过程,参考http://technet.microsoft.com/zh-cn/library/bb838723.aspx
现在想对其进行优化,但是看来看去感觉除了感觉可以讲其中三处 “@Count > @Total”(调整写法后)定义出一个标量之外,感觉没有其他可以优化的,望大神赐教,谢谢!

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[c_DueConscriptionQueue]
@ID INT
AS
IF NOT EXISTS ( SELECT [ID]
FROM [Conscription_Queue]
WHERE [ID] = @ID
AND [Completed] = 0 )
BEGIN
RETURN 0
END
DECLARE @TroopID INT
DECLARE @VillageID INT
DECLARE @UnitTraining INT
DECLARE @NextUnit DATETIME
DECLARE @Total INT
DECLARE @Count INT
SELECT @VillageID = [VillageID], @TroopID = [TroopID], @NextUnit = [NextUnit], @UnitTraining = [UnitTraining], @Total = [Total]
FROM [Conscription_Queue]
WHERE [ID] = @ID
IF ( @UnitTraining <> 0 )
BEGIN
SET @Count = DATEDIFF(s, @NextUnit, GETDATE()) / @UnitTraining + 1
END
ELSE
BEGIN
RETURN 0
END
--检查是否已存在兵种,不存在新增,存在 增加数量
IF NOT EXISTS ( SELECT *
FROM [Village_Troops]
WHERE [VillageID] = @VillageID
AND [InVillageID] = @VillageID
AND [TroopID] = @TroopID
AND [GarrisonType] = 1 )
BEGIN
IF ( @Count > @Total )
BEGIN
SET @Count = @Total
END
INSERT INTO [Village_Troops] ( [TroopID], [quantity], [VillageID], [InVillageID], [GarrisonType] )
VALUES ( @TroopID, @Count, @VillageID, @VillageID, 1 )
END
ELSE
BEGIN
IF ( @Count > @Total )
BEGIN
SET @Count = @Total
END
UPDATE [Village_Troops]
SET [quantity] = [quantity] + @Count
WHERE [VillageID] = @VillageID
AND [TroopID] = @TroopID
AND [InVillageID] = @VillageID
AND [GarrisonType] = 1
END
--增加耗粮
DECLARE @Upkeep INT
SELECT @Upkeep = [Upkeep]
FROM Troops
WHERE ID = @TroopID
UPDATE [Villages]
SET [TroopsUpkeep] = [TroopsUpkeep] + @Upkeep * @Count
WHERE [TileID] = @VillageID
IF ( @Count >= @Total ) --检查是否造完
BEGIN
UPDATE [Conscription_Queue]
SET [Total] = 0, [Completed] = 1
WHERE [ID] = @ID
END