如何在SQL Server 2008中向架构添加架构绑定

时间:2014-02-01 10:26:27

标签: sql-server sql-server-2008 indexing

我正在尝试在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
  无法对视图'dbo.Major_Education_Category'进行架构绑定,因为名称'Major'对于架构绑定无效。名称必须采用两部分格式,对象不能引用自身。

2 个答案:

答案 0 :(得分:3)

需要将from子句中的表指定为两部分{owner}.{tablename}。除非您另有所知,否则最有可能是dbo。因此,请尝试dbo.Majordbo.Registration

答案 1 :(得分: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