Я создал представление. Я хочу создать хранимую процедуру для обновления представления и использовать информацию (колонку «штраф» ... link- http://rextester.com/GHQW83226) из представления и добавить ее в другую таблицу.Обновить представление и использовать хранимую процедуру для него
Вид:
create VIEW consecutive
as
WITH cte as (
SELECT *,
LAG([pointsRewarded], 1) OVER (PARTITION BY [EmployeeID] ORDER BY [WeekNumber]) as prev1_points,
LAG([pointsRewarded], 2) OVER (PARTITION BY [EmployeeID] ORDER BY [WeekNumber]) as prev2_points,
LAG([pointsRewarded], 3) OVER (PARTITION BY [EmployeeID] ORDER BY [WeekNumber]) as prev3_points
FROM week1
)
SELECT *,
CASE WHEN [pointsRewarded] = -10 AND prev1_points = -10 AND prev2_points = -10 AND prev3_points = -10
THEN -200
WHEN [pointsRewarded] = -10 AND prev1_points = -10 AND prev2_points = -10
THEN -100
WHEN [pointsRewarded] = -10 AND prev1_points = -10
THEN -50
ELSE 0
END penalty
FROM cte
хранимой процедуры обновления выше View и использовать данные этого вида по:
create procedure createviewupdatepenaltypointsconsecutive
@WeekNumber nvarchar(255)
as
begin
update consecutive
as
WITH cte as (
SELECT *,
LAG([pointsRewarded], 1) OVER (PARTITION BY [EmployeeID] ORDER BY [WeekNumber]) as prev1_points,
LAG([pointsRewarded], 2) OVER (PARTITION BY [EmployeeID] ORDER BY [WeekNumber]) as prev2_points,
LAG([pointsRewarded], 3) OVER (PARTITION BY [EmployeeID] ORDER BY [WeekNumber]) as prev3_points
FROM week1
)
SELECT *,
CASE WHEN [pointsRewarded] = -10 AND prev1_points = -10 AND prev2_points = -10 AND prev3_points = -10
THEN -200
WHEN [pointsRewarded] = -10 AND prev1_points = -10 AND prev2_points = -10
THEN -100
WHEN [pointsRewarded] = -10 AND prev1_points = -10
THEN -50
ELSE 0
END penalty
FROM cte
/*2nd part - use info from view and add it to another table*/
;WITH cte_1
as (SELECT EmployeeID
,SUM(penalty) as totalpenalty
FROM consecutive /*(**error says** :Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'FROM'.) */
WHERE WeekNumber = week1
GROUP BY EmployeeID)
UPDATE d
SET d.Total_points_Rewarded=d.Total_points_Rewarded+c.totalpenalty,
FROM cte_1 c
JOIN EmployeeTable d on c.EmployeeID=d.EmployeeID
end
Ссылка: http://rextester.com/FSN8036
Может кто-нибудь помочь мне решить данную проблему, чтобы обновить просматривать и использовать его информацию в другой таблице.
почему вы создаете представление в хранимой процедуре, удалите эту часть и попробовать .. – TheGameiswar
mybad, я, но и его, давая ту же ошибку. @TheGameiswar –
'обновление последовательное как WITH ... select' - такого синтаксиса нет –