代码之家  ›  专栏  ›  技术社区  ›  kim3er

尝试使用CTE冻结索引视图时出现严重错误

  •  2
  • kim3er  · 技术社区  · 15 年前

    如果stockview是一个带有全文索引的索引视图,那么我将收到下面的错误消息。数据库以2005兼容模式在2008 Express引擎上运行。

    代码:

    with stockCte (title, grade, price, weighted)
    as
    (
        select sv.[title]                   ,
                sv.[grade]                  ,
                sv.[price]                  ,
                (case when sv.[issue] = @issue and svs.[rank] > 30
                    then svs.[rank] + 100
                    else svs.[rank]
                    end)                    weighted
        from stockView sv
        inner join freetexttable(stockView, (name), @term) svs
            on sv.[id] = svs.[key]
    )
    select * from stockCte;
    

    错误:

    Msg 0, Level 11, State 0, Line 0
    A severe error occurred on the current command.  The results, if any, should be discarded.
    Msg 0, Level 20, State 0, Line 0
    A severe error occurred on the current command.  The results, if any, should be discarded.
    

    当我删除内部联接和加权列时,查询会工作。有什么想法,我都不知所措。

    3 回复  |  直到 13 年前
        1
  •  1
  •   user735232    13 年前

    它在r2中也没有被修复,但有一个修复程序-见知识库文章2421014。

        2
  •  0
  •   u07ch    15 年前

    错误级别11是否未找到数据库对象;FreeTextTable查询上的Select是否作为Select工作?如果是这样,完整查询是否作为一个选择工作(没有CTE定义?)

        3
  •  0
  •   kim3er    15 年前

    我不情愿地使用表变量而不是CTE。

    declare @stockTemp table(
        title               nvarchar(100),
        grade               nvarchar(50),
        price               money,
        row                 bigint
    );
    
    insert into @stockTemp
    select sv.[title]                   ,
            sv.[grade]                  ,
            sv.[price]                  ,
            row_number() over (order by (case when sv.[issue] = @issue and svs.[rank] > 30
                                                then svs.[rank] + 100
                                                else svs.[rank]
                                                end) desc,
                                            sv.title,
                                            sv.grade desc,
                                            sv.price asc)
    from stockView sv
    inner join freetexttable(stockView, (*), @term) svs
        on sv.[id] = svs.[key]
    
    select * from @stockTemp;
    

    如果有人有更好的建议,请告诉我。