Серьезная ошибка при попытке FREETEXTTABLE индексированного представления с помощью CTE - PullRequest
2 голосов
/ 14 июня 2009

Если stockView - это индексированное представление с полнотекстовым индексом, я получаю сообщение об ошибке ниже. База данных работает на движке 2008 Express в режиме совместимости 2005 года.

Код:

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 ]

1 голос
/ 01 июля 2011

Это не было исправлено в R2, но есть исправление для этого - см. Статью базы знаний № 2421014.

0 голосов
/ 14 июня 2009

Я неохотно прибегнул к использованию табличной переменной вместо 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;

Если у кого-нибудь есть предложения получше, пожалуйста, дайте мне знать.

0 голосов
/ 14 июня 2009

Уровень ошибки 11 - объект базы данных не найден; работает ли выборка в произвольном текстовом запросе как выборка? Если это так, полный запрос работает как выбор (без определения cte?)

...