【问题标题】:Update view and use a stored procedure for it更新视图并为其使用存储过程
【发布时间】:2017-03-16 16:39:00
【问题描述】:

我创建了一个视图。我想创建一个存储过程来更新视图并从视图中使用 info("penalty" column... 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

更新上述视图并使用该视图信息的存储过程:

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

谁能帮我解决上述问题以更新视图并在另一个表中使用其信息。

【问题讨论】:

  • 为什么要在存储过程中创建视图,删除该部分并尝试..
  • mybad,i 但它给出了同样的错误。 @TheGameiswar
  • update consecutive as WITH ... select - 没有这样的语法
  • @IvanStarostin 不工作,伙计
  • 我知道。因为没有这样的语法。 “更新”是指修改数据还是修改视图源代码?

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012


【解决方案1】:

不是你指出的那个地方。但是这个来自

 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

【讨论】:

  • 你这是什么意思?
  • 我的意思是问题的一部分是更新视图。只是想知道你是否对此有任何意见
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2017-03-01
  • 2011-12-04
相关资源
最近更新 更多