2014-02-01 2 views
1

Я пытаюсь создать индекс в моей базе данных SQL Server 2008.Как добавить привязку схемы к представлению в SQL Server 2008

Но я сталкиваюсь ошибку, когда я раскомментировать WITH SCHEMABINDING:

USE UNIVERSITY 
GO 

CREATE VIEW dbo.Major_Education_Category 
WITH SCHEMABINDING 
AS 
    SELECT CA.CName, MA.MName 
    FROM 
    (SELECT M.Major_ID MID , Major_Name MName 
     FROM Major M, Registration R 
     WHERE M.Major_ID = R.Major_ID) MA, 
    (SELECT C.Category_ID CId, C.Category_Name CName 
     FROM Education_Category C, Registration R 
     WHERE C.Category_ID = R.Category_ID) CA 
    GROUP BY 
     CA.CName, MA.MName 

CREATE UNIQUE CLUSTERED INDEX UCI_Major_Id_By_Education_Category 
ON dbo.Major_Education_Category (MName) 
GO 

CREATE UNIQUE CLUSTERED INDEX UCI_Category_Id_By_Major 
ON dbo.Major_Education_Category (CName) 
GO 

Ошибка:

Msg 4512, Level 16, State 3, Procedure Major_Education_Category, Line 6
Cannot schema bind view 'dbo.Major_Education_Category' because name 'Major' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.

+1

[Плохие привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick -using-old-style-joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был отменен с помощью ANSI - ** 92 ** SQL Standard (более ** 20 лет ** назад) –

+0

Почему вы перекрещиваетесь с производными таблицами 'MA' и' CA'? –

ответ

3

таблиц в из пункта должны быть определены как две части {owner}.{tablename}. Если вы не знаете иначе, это, скорее всего, будет dbo. Поэтому попробуйте dbo.Major, dbo.Registration и т. Д.

0

Ввод dbo.TableName. Изменения:

(SELECT M.Major_ID MID , Major_Name MName 
    FROM dbo.Major M, dbo.Registration R 
    WHERE M.Major_ID = R.Major_ID) MA, 
(SELECT C.Category_ID CId, C.Category_Name CName 
    FROM dbo.Education_Category C, dbo.Registration R 
    WHERE C.Category_ID = R.Category_ID) CA 
Смежные вопросы