none
索引试图 RRS feed

  • 问题

  • Create VIEW [dbo].[U_VIEWS] WITH SCHEMABINDING AS SELECT TRC_LFDUP1.RowNumber, TRC_LFDUP1.EventClass, TRC_LFDUP1.SPID, TRC_LFDUP1.StartTime, TRC_LFDUP1.DatabaseID, TRC_LFDUP1.DatabaseName  FROM dbo.TRC_LFDUP1

    提示成功

    但是

     因为上面是单表,所以建立索引试图成功

    Create VIEW [dbo].[U_VIEWS] WITH SCHEMABINDING AS SELECT TRC_LFDUP1.RowNumber, TRC_LFDUP1.EventClass, TRC_LFDUP1.SPID, TRC_LFDUP1.StartTime, TRC_LFDUP1.DatabaseID, TRC_LFDUP1.DatabaseName  FROM dbo.TRC_LFDUP1,dbo.test t t.id=id

    提示失败,我想知道多表怎么建立索引试图呢?


    星光总能为我指引方向
    2011年4月29日 8:03

答案

全部回复

  • Tried this?

    Create VIEW [dbo].[U_VIEWS] WITH SCHEMABINDING AS SELECT TRC_LFDUP1.RowNumber, TRC_LFDUP1.EventClass, TRC_LFDUP1.SPID, TRC_LFDUP1.StartTime, TRC_LFDUP1.DatabaseID, TRC_LFDUP1.DatabaseName  FROM dbo.TRC_LFDUP1 join dbo.test t on t.id=TRC_LFDUP1.id

    2011年4月29日 13:01
  • 消息 208,级别 16,状态 1,过程 U_VIEWS,第 1 行对象名 'dbo.test' 无效。 --------------------------------

    这个是没有办法建成索引试图


    星光总能为我指引方向
    2011年5月3日 2:03
  • Why you reference dbo.test in the view if it's not valid?
    2011年5月3日 2:57
  • 这是个事例测试,我的目的就是想通过两张表关联,建立索引试图,单表索引试图,我可以建立成功


    星光总能为我指引方向
    2011年5月3日 4:58
  • 你好,

    Create VIEW [dbo].[U_VIEWS] WITH SCHEMABINDING AS SELECT TRC_LFDUP1.RowNumber, TRC_LFDUP1.EventClass, TRC_LFDUP1.SPID, TRC_LFDUP1.StartTime, TRC_LFDUP1.DatabaseID, TRC_LFDUP1.DatabaseName FROM dbo.TRC_LFDUP1,dbo.test t t.id=id
    >>消息 208,级别 16,状态 1,过程 U_VIEWS,第 1 行对象名 'dbo.test' 无效。

    你在创建索引视图的时候,提示的错误信息是你的数据库不存在 'dbo.test' 这个数据库表,你需要先创建它然后再创建索引视图。

    关于索引视图的创建,你可以参考:通过 SQL Server 2005 索引视图提高性能

    如果你还是不能解决问题,请把相关联的表结构的CREATE的 DDL 语句及测试数据贴上来,以便我们更好地分析问题。


    Best Regards,
    Stephanie Lv

    2011年5月3日 6:29
  • 你好,很感谢你的提醒,这个问题我解决了,那我随之而来又有个问题了

    如果我是跨数据库进行创建试图索引应该怎么解决呢,如:

    dbo.TRC_LFDUP1 在 ta 数据库下

     dbo.dbo.test    在 tb  数据库下

    我应该怎么创建这个试图索引呢?

     Create VIEW [dbo].[U_VIEWS] WITH SCHEMABINDING AS

    SELECT TRC_LFDUP1.RowNumber, TRC_LFDUP1.EventClass, TRC_LFDUP1.SPID, TRC_LFDUP1.StartTime, TRC_LFDUP1.DatabaseID, TRC_LFDUP1.DatabaseName FROM dbo.TRC_LFDUP1,tb.dbo.test t t.id=id

    因为名称 ',tb.dbo.test ' 对于架构绑定无效。名称必须由两部分构成,并且对象不能引用自身。


    星光总能为我指引方向
    2011年5月3日 7:13
  • 你好,

    很抱歉,创建视图索引如果指定了 SCHEMABINDING,所有被引用的对象必须在同一个数据库内。而且,所引用的对象必须有schema.object 两部分组成。

    详细信息请参阅:http://msdn.microsoft.com/zh-cn/library/ms187956.aspx

     


    Best Regards,
    Stephanie Lv

    2011年5月3日 7:46
  • 你好,很高兴能听到你的赐教,谢谢。我可以这样理解,如果想要建立索引试图,满足的条件当中一定要符合,在同一个 DB下的任何TABLES ,我这样的理解正确吗?


    星光总能为我指引方向
    2011年5月3日 8:41
  • 你好,

    是的。索引视图不能跨数据库引用的对象不能跨数据库。因为指定了SCHEMABINDING,此外,不能删除参与了使用 SCHEMABINDING 子句创建的视图的视图或表,除非该视图已被删除或更改而不再具有架构绑定。关于索引视图创建的一些要求,建议你参阅上面我提供的链接。同时参阅:http://technet.microsoft.com/zh-cn/library/ms191432(SQL.90).aspx

     


    Best Regards,
    Stephanie Lv

    2011年5月3日 11:10