首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

能在视图中建立索引的吧,怎么创建

2012-02-15 
能在视图中建立索引的吧,如何创建?能在视图中建立索引的吧,如何创建?CREATEVIEWdbo.V_MemberListsASSELECT

能在视图中建立索引的吧,如何创建?
能在视图中建立索引的吧,如何创建?

CREATE   VIEW   dbo.V_MemberLists  

AS
SELECT   dbo.t_Member_Member.ID,   dbo.t_Member_Member.UserName,  
            dbo.t_Member_Member.Name,   ISNULL(dbo.t_Member_Member.csMoney,   0)  
            AS   csMoney,   ISNULL(dbo.t_Member_Member.getMoney,   0)   AS   getMoney,  
            dbo.t_Member_Member.Code1,   dbo.t_Member_Member.CodeAll   AS   cCode,  
            dbo.CheckStatusName(dbo.t_Member_Info.CheckStatus)   AS   CheckStatus,  
            dbo.MemberStatusName(dbo.t_Member_Info.MemberStatus)   AS   MemberStatus,  
            dbo.t_Member_Info.RegisterTime,   dbo.t_Member_Info.BeginTime,  
            dbo.t_Member_Info.EndTime,   ISNULL(dbo.t_Member_Level.Name,   '无 ')  
            AS   LevelName,   dbo.t_Member_Level.ID   AS   LevelID,  
            dbo.t_Member_Level.ParentID
FROM   dbo.t_Member_Member   INNER   JOIN  
            dbo.t_Member_Info   ON  
            dbo.t_Member_Member.ID   =   dbo.t_Member_Info.MemberID   INNER   JOIN
            dbo.t_Member_Level   ON   dbo.t_Member_Info.LevelID   =   dbo.t_Member_Level.ID


创建索引时
create   unique   clustered   index   vname   on     V_MemberLists

但是提示如下:
无法在视图   'V_MemberLists '   上创建   索引,因为该视图未绑定到架构。


[解决办法]
唯一索引不行,其他的可以,但是需要重新建立试图

CREATE VIEW dbo.V_MemberLists
WITH SCHEMABINDING --必须加这个
AS
SELECT dbo.t_Member_Member.ID, dbo.t_Member_Member.UserName,
dbo.t_Member_Member.Name, ISNULL(dbo.t_Member_Member.csMoney, 0)
AS csMoney, ISNULL(dbo.t_Member_Member.getMoney, 0) AS getMoney,
dbo.t_Member_Member.Code1, dbo.t_Member_Member.CodeAll AS cCode,
dbo.CheckStatusName(dbo.t_Member_Info.CheckStatus) AS CheckStatus,
dbo.MemberStatusName(dbo.t_Member_Info.MemberStatus) AS MemberStatus,
dbo.t_Member_Info.RegisterTime, dbo.t_Member_Info.BeginTime,
dbo.t_Member_Info.EndTime, ISNULL(dbo.t_Member_Level.Name, '无 ')
AS LevelName, dbo.t_Member_Level.ID AS LevelID,
dbo.t_Member_Level.ParentID
FROM dbo.t_Member_Member INNER JOIN
dbo.t_Member_Info ON
dbo.t_Member_Member.ID = dbo.t_Member_Info.MemberID INNER JOIN
dbo.t_Member_Level ON dbo.t_Member_Info.LevelID = dbo.t_Member_Level.ID


go

create index vname on V_MemberLists(字段列表)
go

[解决办法]
帮助的文字,参考一下:

要建立索引的视图的名称。必须使用 SCHEMABINDING 定义视图才能在视图上创建索引。视图定义也必须具有确定性。如果选择列表中的所有表达式、WHERE 和 GROUP BY 子句都具有确定性,则视图也具有确定性。而且,所有键列必须是精确的。只有视图的非键列可能包含浮点表达式(使用 float 数据类型的表达式),而且 float 表达式不能在视图定义的其它任何位置使用。

若要在确定性视图中查找列,请使用 COLUMNPROPERTY 函数(IsDeterministic 属性)。该函数的 IsPrecise 属性可用来确定键列是否精确。

必须先为视图创建唯一的聚集索引,才能为该视图创建非聚集索引。

在 SQL Server 企业版或开发版中,查询优化器可使用索引视图加快查询的执行速度。要使优化程序考虑将该视图作为替换,并不需要在查询中引用该视图。

在创建索引视图或对参与索引视图的表中的行进行操作时,有 7 个 SET 选项必须指派特定的值。SET 选项 ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING 和 ANSI_WARNING 必须为 ON。SET 选项 NUMERIC_ROUNDABORT 必须为 OFF。



如果与上述设置有所不同,对索引视图所引用的任何表执行的数据修改语句 (INSERT、UPDATE、DELETE) 都将失败,SQL Server 会显示一条错误信息,列出所有违反设置要求的 SET 选项。此外,对于涉及索引视图的 SELECT 语句,如果任何 SET 选项的值不是所需的值,则 SQL Server 在处理该 SELECT 语句时不考虑索引视图替换。在受上述 SET 选项影响的情况中,这将确保查询结果的正确性。

如果应用程序使用 DB-Library 连接,则必须为服务器上的所有 7 个 SET 选项指派所需的值。(默认情况下,OLE DB 和 ODBC 连接已经正确设置了除 ARITHABORT 外所有需要的 SET 选项。)

如果并非所有上述 SET 选项均有所需的值,则某些操作(例如 BCP、复制或分布式查询)可能无法对参与索引视图的表执行更新。在大多数情况下,将 ARITHABORT 设置为 ON(通过服务器配置选项中的 user options)可以避免这一问题。

强烈建议在服务器的任一数据库中创建计算列上的第一个索引视图或索引后,尽早在服务器范围内将 ARITHABORT 用户选项设置为 ON。

有关索引视图注意事项和限制的更多信息,请参见注释部分。


[解决办法]
可以而且必须为视图创建唯一的聚集索引,才能为该视图创建非聚集索引。

看来前面理解错了,呵呵

主要是楼主的视图为绑定到架构,加
WITH SCHEMABINDING 来解决

[解决办法]
好DE,今天又学到东西了~一天一点点,爽YY。

热点排行