2

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

Код:

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. 

Запрос работает, когда я удаляю внутреннее соединение и взвешенное столбец. Любые идеи, я в недоумении.

+0

Я ничего не вижу с головы. Какую-либо конкретную причину вы сделали это CTE вместо того, чтобы просто использовать внутренний выбор? –

+0

Внутренний выбор был только для меня, и в конечном итоге выбор будет включать функции подкачки, которые будут отображаться через CTE. – kim3er

+0

Если вы видите «Серьезная ошибка в текущей команде», это означает, что, скорее всего, сервер попадает во внутреннюю среду выполнения или нарушение прав доступа. Он создал мини-накопитель, расположенный в вашей папке LOG (с именем sqldump ____. Mdmp). Вы можете отправить эту свалку в службу поддержки клиентов, и они могут исследовать и консультировать. –

ответ

0

Неохотно я прибегал к использованию переменной таблицы вместо 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

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

+0

Внутренний выбор работает очень хорошо без определения CTE, и определение CTE работает очень хорошо, когда freettexttable ссылается на таблицу, а не на представление. Это должна быть комбинация CTE и индексированного представления. – kim3er

1

Он также не был исправлен в R2, но для него есть исправление - см. Статью в KB # 2421014.

Смежные вопросы