2010-11-23 10 views
2

Je dois créer un index AM dans SQL, mais il doit afficher les enregistrements en entrant seulement une partie du nom. L'indice devrait être créé pour récupérer les informations des élèves utilisant une partie du nom de l'élève (si le nom si Johnanesburg, l'utilisateur peut entrer John)Utiliser INDEX dans SQL Server

je la syntaxe ci-dessous, mais il ne fonctionnera pas

create index Student ON Student(SName) 
SELECT * FROM Student WHERE StRegNo LIKE A% 
go 
+2

Je pense que vous mai ont mal compris le but des index: http://en.wikipedia.org/wiki/Index_%28database%29 – RLT

Répondre

3

Je pense que votre problème est ici: A%

Essayez de l'emballer dans des apostrophes.

SELECT * 
    FROM Student 
WHERE StRegNo LIKE 'A%' 

En outre, vous voudrez peut-être une déclaration GO après avoir créé votre index.

+2

Utilisez le "GO" seulement dans SQL Server Mgmt Studio - c'est ** pas ** un mot-clé de langage SQL - c'est un séparateur de commande SSMS –

0

L'index que vous créez sur SName n'apportera pas autant d'avantages pour l'instruction select que vous exécutez qu'une création créée sur StRegNo. En supposant que StRegNo est la clé primaire sur la table Student vous pouvez essayer:

CREATE CLUSTERED INDEX IX_Student on Student(StRegNo) 

SELECT * 
FROM Student 
WHERE StRegNo LIKE 'A%' 

Cependant, il semble que le SQL que vous avez fourni est en contradiction avec votre question. Si vous souhaitez effectuer une recherche en fonction du nom de l'étudiant, vous pouvez utiliser les éléments suivants à la place.

CREATE NONCLUSTERED INDEX IX_Student on Student(SName) 

SELECT * 
FROM Student 
WHERE SName LIKE 'A%' 
0

Ardman a bien compris votre requête% A => '% A'. Maintenant, comme pour l'index, c'est une autre histoire qu'aucun index ne peut vous aider à ce moment-là, pas plus que la recherche en texte intégral. Si vous voulez rechercher des noms commençant par @A (c'est-à-dire John%), un index ordonné pourrait vous aider mais sinon (c'est-à-dire% bur%), vous ferez un scan de table complet!