0

Я создал представление. Я хочу создать хранимую процедуру для обновления представления и использовать информацию (колонку «штраф» ... 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

Может кто-нибудь помочь мне решить данную проблему, чтобы обновить просматривать и использовать его информацию в другой таблице.

+0

почему вы создаете представление в хранимой процедуре, удалите эту часть и попробовать .. – TheGameiswar

+0

mybad, я, но и его, давая ту же ошибку. @TheGameiswar –

+0

'обновление последовательное как WITH ... select' - такого синтаксиса нет –

ответ

0

не тот место где вы указали. но это от

UPDATE d 
     SET d.Total_points_Rewarded=d.Total_points_Rewarded+c.totalpenalty, -- Comma here. Remove it 

     FROM cte_1 c 
     JOIN EmployeeTable d on c.EmployeeID=d.EmployeeID 
+0

в порядке. Спасибо. Любой способ обновить представление? –

+0

Что вы подразумеваете под этим? – Squirrel

+0

Я имею в виду, что частью этой проблемы было обновить представление. Просто хотелось узнать, есть ли у вас какое-либо мнение по этому поводу –