2

Lorsque stockView est une vue indexée avec un index de texte intégral, le message d'erreur suivant s'affiche. La base de données fonctionne sur un moteur 2008 Express en mode de compatibilité 2005.Erreur grave lors de la tentative de FREETEXTTABLE une vue indexée avec un CTE

code:

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; 

Erreur:

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. 

La requête fonctionne lorsque je retire la jointure interne et la colonne pondérée. Toutes les idées, je suis à perte.

+0

Je ne vois rien du haut de ma tête. Une raison particulière pour laquelle vous avez fait un CTE au lieu de simplement utiliser le select interne? –

+0

La sélection interne était juste moi pour commencer, la sélection éventuelle inclura la fonctionnalité de pagination qui sera exposée via le CTE. – kim3er

+0

Si vous voyez 'Une erreur grave est survenue sur la commande en cours', cela signifie que le serveur a probablement rencontré une violation d'accès interne ou une violation d'accès. Il a produit un minidump situé dans votre dossier LOG (nommé sqldump ____. Mdmp). Vous pouvez soumettre cette décharge au support client et ils peuvent enquêter et conseiller. –

Répondre

0

A contrecoeur, j'ai utilisé une variable de table au lieu d'une 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; 

Si quelqu'un a de meilleures suggestions, s'il vous plaît faites le moi savoir.

0

Le niveau d'erreur 11 est un objet de base de données introuvable; le select sur la requête freetexttable fonctionne-t-il comme un select? Si oui, la requête complète fonctionne-t-elle comme une sélection (sans la définition cte?)

+0

La sélection interne fonctionne très bien sans la définition CTE et la définition CTE fonctionne très bien lorsque freettexttable fait référence à une table plutôt qu'à la vue. Ce doit être la combinaison d'un CTE et d'une vue indexée. – kim3er

1

Il n'a pas non plus été corrigé dans R2, mais il existe un correctif pour celui-ci - voir l'article de la base de connaissances n ° 2421014.

Questions connexes