2009-04-21 9 views
1

J'utilise SQL Server 2008 et j'ai une vue qui ressemble à ceci:Mettre un index de recherche en texte intégral sur une vue avec une fonction

select ID, dbo.functionname(ID) from tablename 

Je suis en train de mettre un texte intégral index sur ceci, mais il ne semble pas avoir un index unique que je peux partir. Le nom de table .ID est l'identifiant unique.

J'ai essayé de créer un index dessus, mais il indique qu'il ne peut pas afficher de liaison de schéma parce que la fonction n'est pas schemabound.

Que dois-je faire pour créer l'index de texte intégral?

+0

Avez-vous essayé d'en faire une vue indexée? (donc les résultats sont stockés sur le système de fichiers de la base de données)? –

+0

J'ai essayé de créer un index sur celui-ci, mais il dit qu'il ne peut pas afficher de liaison de schéma parce que la fonction est maintenant schemabound. – ajma

+0

Vous devez ajouter le nom du schéma pour pouvoir créer la vue indexée sélectionnez ID, dbo.functionname (ID) de [YourSchema] .tablename –

Répondre

2

Pour pouvoir créer une vue d'index, la vue doit être déterministe, c'est-à-dire qu'elle doit être la même pour chaque requête.

Votre fonction utilisateur est-elle deterministic?

Fonction définie par l'utilisateur Déterminisme

Que ce soit une fonction définie par l'utilisateur est déterministe ou non déterministe dépend de la façon dont la fonction est codée. fonctions définies par l'utilisateur sont déterministe si:

* The function is schema-bound. 

* All built-in or user-defined functions called by the user-defined 
fonction

sont déterministes.

* The body of the function references no database objects outside 

l'étendue de la fonction. Pour par exemple, une fonction déterministe ne peut pas référencer des tables autres que des variables de table qui sont locales à la fonction .

* The function does not call any extended stored procedures. 

fonctions définies par l'utilisateur qui ne sont pas répondent à ces critères sont marqués comme non déterministes. Les fonctions non déterministes ne sont pas autorisées dans le corps des fonctions définies par l'utilisateur.

Votre fonction SchemaBound?

alter function [dbo].[UserFunction] 
(@example int = 1) 
returns int 
with schemabinding 
as 
begin 
    return 1 
end 

Votre vue est-elle SchemaBound?

ALTER VIEW dbo.UserView 
WITH SCHEMABINDING 
AS 
SELECT ID, [dbo].userFunction 

Pour créer une vue indexée, vous devez d'abord créer un unique clustered index(See FAQ a bottom).

0

Je suppose que vous mean't « non » schemabound dans les commentaires ci-dessus Recréez votre point de vue « AVEC SCHEMABINDING » Ensuite, créez un index unique, clusterred comme expliqué ici http://www.mssqltips.com/tip.asp?tip=1610 Ensuite, essayez d'ajouter votre texte intégral Index

Questions connexes