更新我希望在运行时其列在存储过程中更新动态确定动态确定列在存储过程中
我有一个表BshForecast
有类似的属性:
projectId, JobTypeId, Year, JanDone, FebDone, MarDone... (for all months)
而且我有此存储过程不起作用
CREATE PROCEDURE [dbo].[SP_Update_Done_Last_Month2]
@Project_ID INT,
@Job_Type_ID INT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @LAST_MONTH INT
SET @LAST_MONTH = DATEPART(MM,DATEADD(MM, -1, GETDATE()))
UPDATE BshForecast
Set (CASE @LAST_MONTH
WHEN 1 THEN JanDone
WHEN 2 THEN FebDone
WHEN 3 THEN MarDone
WHEN 4 THEN AprDone
WHEN 5 THEN MayDone
WHEN 6 THEN JunDone
WHEN 7 THEN JulDone
WHEN 8 THEN AugDone
WHEN 9 THEN SepDone
WHEN 10 THEN OctDone
WHEN 11 THEN NovDone
WHEN 12 THEN DecDone
END) = 0
WHERE
(ProjectId = @Project_ID)
and (JobTypeId = @Job_Type_ID)
and (Year = DATEPART(YY, DATEADD(MM, -1, GETDATE())))
END
您认为似乎是什么问题?什么是正确的方法来做到这一点?
问题是:SQL Server的'CASE'语句可以提供**值** - 但不包括SQL语句的部分(如列名).....您不能动态地选择要更新的列。还有:你自己的存储过程应该不使用'sp_'前缀 - 它由Microsoft保留用于自己的使用。 – 2012-04-11 13:21:09
PS:它是**预测**(在中间有一个“e”) - 不是*预测*因为您拥有它... – 2012-04-11 13:21:27