数据库中已经存在一个名为“STUD1”的对象。

3
这是我在数据库上运行的查询,但我发现以下3个错误一直发生。
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;

我遇到了错误:

Msg 2714,级别16,状态3,过程STUD1,行2
数据库中已经存在名为“STUD1”的对象。

Msg 2714,级别16,状态3,过程STUD2,行9
数据库中已经存在名为“STUD2”的对象。

Msg 537,级别16,状态2,行20
向LEFT或SUBSTRING函数传递的长度参数无效。

我尝试了一些解决方案,但仍无法执行。非常感谢您的帮助。

前两个错误提示视图已经存在于数据库中。第三个错误提示无效参数,可能EVAL_PRIOD不是varvhar(字符串)类型。 - FLICKER
如果您继续执行整个脚本,它将尝试每次创建视图。如果那些CREATE VIEW语句已经成功,则再次运行它们将生成您正在获取的错误。 - siride
@FLICKER 我不断更改视图名称,但仍然出现相同的错误..并且 EVAL_PERIOD 的数据类型为 varchar(250)。 - Fiq
@siride 哦,我真的忘记了。视图与其他不同,然后出现了LEFT或SUBSTRING函数的无效长度参数传递错误。 - Fiq
如果您想要重复使用此内容,则不应使用“CREATE VIEW”。 - Marco Bong
1个回答

2

我猜你已经有一个同名的对象了。你可以运行下面的脚本来查看它正在找到哪个对象。

USE MyDatabaseName
GO

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

如果你需要追踪它,你可以使用 标签。
SELECT OBJECT_DEFINITION(1678629023)

查看创建该对象的SQL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接