2016-03-28 65 views
0

這是我嘗試在我的數據庫上運行的查詢,但是我發現下面這3個錯誤仍然發生。數據庫中已經有一個名爲'STUD1'的對象

CREATE VIEW STUD1 
AS 
    SELECT 
     *, 
     RN = ROW_NUMBER() OVER (PARTITION BY R.ContractID 
           ORDER BY CONVERT(DATE, LEFT(EVAL_PERIOD , charindex('-', EVAL_PERIOD) - 1), 103) DESC) 
    FROM 
     SCMD3.DBO.CPE R; 
GO 

CREATE VIEW STUD2 
AS 
    SELECT 
     C.ContractID, 
     GRED1 = MAX(CASE WHEN RN = 2 THEN ALL_GRADE END), 
     MARK1 = MAX(CASE WHEN RN = 2 THEN ALL_SCORE END), 
     GRED2 = MAX(CASE WHEN RN = 1 THEN ALL_GRADE END), 
     MARK2 = MAX(CASE WHEN RN = 1 THEN ALL_SCORE END) 
    FROM 
     STUD1 C 
    GROUP BY 
     C.ContractID; 
GO 

SELECT 
    s.ContractTitle, x.GRED1, x.MARK1, x.GRED2, x.MARK2 
FROM 
    STUD2 x 
INNER JOIN 
    SCMD3.DBO.CONTRACTMASTER s ON x.ContractID = s.ID; 

我得到的錯誤:

消息2714,級別16,狀態3,過程STUD1,2號線
已經有一個在數據庫中名爲 'STUD1' 的對象。

消息2714,級別16,狀態3,過程STUD2,第9行
數據庫中已有一個名爲'STUD2'的對象。

Msg 537,Level 16,State 2,Line 20
傳遞給LEFT或SUBSTRING函數的長度參數無效。

我已經嘗試了一些解決方案,但仍未能執行。幫助將不勝感激。

+0

前兩個錯誤是說視圖已經在數據庫中。第三個參數表示無效參數,也許EVAL_PRIOD不是varvhar(字符串)類型 – FLICKER

+0

如果繼續執行整個腳本,它將嘗試每次創建視圖。如果這些CREATE VIEW語句已經成功,那麼再次運行它們會產生你正在獲得的錯誤。 – siride

+0

@FLICKER我不斷更改視圖名稱,但仍然有相同的錯誤..和EVAL_PERIOD的數據類型是varchar(250) – Fiq

回答

0

我的猜測是你已經有了這個名字的對象。您可以通過運行以下腳本查看它找到的對象。

USE MyDatabaseName 
GO 

SELECT * 
FROM sys.all_objects 
WHERE NAME = 'STUD1' 

如果它有助於追查,您可以使用

SELECT OBJECT_DEFINITION(1678629023) 

,以查看創建該對象的SQL。

相關問題