SQL: Comme vs Contient - des Résultats Différents
Je suis à court de deux requêtes sur une table.
SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, 'STYCAST')
Et
SELECT MSDS FROM dbo.MSDSSearch3 WHERE MSDS like '%STYCAST%'
La première requête sera de retour
'STYCAST 50300 LV'
Et la deuxième sera de retour
'STYCAST 50300 LV'
'STYCAST 2851 BLACK'
Personne ne sait pourquoi le comme serait de retour plus de valeurs que le contient? Est-il un problème avec la façon dont je suis en cours d'exécution contient? Merci à l'avance.
Quelle version de SQL Server? Si l'année 2008, vous pouvez obtenir une certaine visibilité dans l'analyseur avec
Intéressante question, êtes-vous sûr que les deux valeurs sont exactement les mêmes? comme dans aucun avant / après les caractères espace. Qui pourrait causer ce problème comme l'CONTIENT correspondre exactement à votre texte alors que l'aimerai correspondre à votre texte + quelque chose de chaque côté
Sonne comme un cas où votre catalogue de texte intégral est hors de date. Vous voudrez peut-être essayer de la reconstruire avec un ALTER FULLTEXT CATALOGUE.
J'ai pensé à cela, et a couru comme un 'STYCAST%", avec le même résultat. Le serveur est en cours d'exécution de Microsoft SQL Server 2008. Je vais continuer à déconner avec elle, et vous permettent de savoir si je vois quelque chose hors de l'ordinaire.
En 2008, vous pouvez également interroger
SELECT * FROM sys.dm_fts_parser('"STYCAST 2851 BLACK"', 1033, 0,0)
je ne vois aucune raison pour que les cordes ne soient traités différemment.Intéressante question, êtes-vous sûr que les deux valeurs sont exactement les mêmes? comme dans aucun avant / après les caractères espace. Qui pourrait causer ce problème comme l'CONTIENT correspondre exactement à votre texte alors que l'aimerai correspondre à votre texte + quelque chose de chaque côté
Sonne comme un cas où votre catalogue de texte intégral est hors de date. Vous voudrez peut-être essayer de la reconstruire avec un ALTER FULLTEXT CATALOGUE.
J'ai pensé à cela, et a couru comme un 'STYCAST%", avec le même résultat. Le serveur est en cours d'exécution de Microsoft SQL Server 2008. Je vais continuer à déconner avec elle, et vous permettent de savoir si je vois quelque chose hors de l'ordinaire.
En 2008, vous pouvez également interroger
sys.dm_fts_index_keywords
pour voir ce qui est indexé.OriginalL'auteur Corey | 2011-10-07
Vous devez vous connecter pour publier un commentaire.
Voici un poste similaire, où la reconstruction du catalogue de texte intégral a semblé résoudre le problème:
SQL Problème: à l'Aide de contains() ne fonctionne pas, mais COMME fonctionne très bien
OriginalL'auteur DougEC
CONTIENT est totalement différente d'une fonction, c'est un prédicat de base de la requête pour le texte intégral des colonnes; il n'est pas une fonction pour déterminer si une colonne contient une chaîne de caractères.
Pour la requête en cours d'exécution, vous pouvez utiliser ceci:
Là, vous avez un préfixe de recherche, au lieu d'un simple_term recherche comme celle que vous avez actuellement.
Plus de détails: http://msdn.microsoft.com/en-us/library/ms187787.aspx
Peut-être dans la façon dont vous utilisez le texte "STYCAST 2851 NOIR" ne pas tomber dans les résultats parce qu'il ont un caractère de plus que "STYCAST 50300 LV", c'est donc un [7 du 17 match] vs [7 du 16 match]. Je ne suis pas sûr, mais qui pourrait expliquer ce comportement étrange.
Triste de lire cela; Ensuite, il devrait être dépassée catalogue, mais vous avez dit que vous avez déjà mis à jour. C'est très étrange.
Si vous exécutez ce: SÉLECTIONNEZ FS DE dbo.MSDSSearch3 OÙ CONTIENT(FS, 'STYCAST 2851 NOIR") ?
Désolé, je n'ai pas mis à jour encore, j'aurais dû être plus précis. Actuellement dans le processus d'obtention d'une emprise de l'administrateur du serveur. J'espère que ça va résoudre le problème.
Quant à la seconde question, si j'exécute la requête avec le plein contient, j'obtiens l'erreur: Msg 7630, Niveau 15, État 3, Ligne 1 erreur de Syntaxe près de '2851' dans le texte intégral de la condition de recherche 'STYCAST 2851 NOIR".
OriginalL'auteur daniloquio