Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

संग्रहीत प्रक्रिया के भीतर दृश्य बदलें

आप ALTER VIEW नहीं चला पाएंगे आपकी संग्रहीत प्रक्रिया में उस तरह का बयान। इसलिए अपनी समस्या का समाधान करने के लिए आपको 2 कदम उठाने होंगे:

1) वर्तमान में दिखाई देने वाली त्रुटि को ठीक करने के लिए आपको सीटीई को इस तरह के अर्धविराम से शुरू करना होगा:

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

(या इससे भी बेहतर अपने सभी SQL कथनों को अर्धविराम के साथ समाप्त करना शुरू करें क्योंकि विकल्प बहिष्कृत है)।

2) अपने परिवर्तन दृश्य कथन को एक गतिशील SQL स्ट्रिंग में बदलें और sp_executesql . का उपयोग करके इसे निष्पादित करें ALTER VIEW . के रूप में कथन बैच में पहला होना चाहिए:

CREATE PROCEDURE createviewupdatepenaltypointsconsecutive
AS
BEGIN
   DECLARE @STMT AS NVARCHAR(MAX) =
   '
  ALTER 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
   '
   EXEC sp_executesql @STMT;
END



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ExecuteNonQuery चयन sql स्टेटमेंट के लिए कोई पंक्तियाँ नहीं लौटा रहा है

  2. मैं DBNull.Value के साथ एक नल स्ट्रिंग को स्पष्ट रूप से और जल्दी से कैसे माप सकता हूं?

  3. MMC स्नैप-इन नहीं बना सका। SQL सर्वर कॉन्फ़िगरेशन प्रबंधक त्रुटि

  4. मैं SQL सर्वर 2008 प्रबंधन स्टूडियो में टेक्स्ट या वर्कर (MAX) कॉलम की पूरी सामग्री कैसे देखूं?

  5. एसक्यूएल में स्ट्रिंग से चार, डबल, इंट पैटर्न पढ़ें