Je suis assez inutile à SQL mais je me trouve avoir à écrire une procédure stockée pour une recherche de keyphrase em>, j'essaie de faire une simple sélection de noms de noms. % Mot-clé Key% - Ensuite, une autre sélection sur la description -Same Mots-clés - et joindre (Union) Le 2 sélectionne. p> Cependant, j'obtiens l'erreur: p> J'ai essayé d'utiliser J'ai également essayé de travailler à l'aide de tables temporaires et de sélectionner distinctes à ce sujet, mais c'est là que je suis vraiment confus. p> Règles: strong> p> colonnes de table (l'important 2 que je travaille avec nom et une description): P> Union tout code> mais qui a renvoyé des lignes en double dans certaines instances ( Selon le mot-clé / la phrase). p>
(SELECT Products.ProductId, Name, Introduction, Description, Active,
Material, Colour, Dimensions, Photo, Price, DisplayOrder, FriendlyURL,
ProductReference, Categories_Products_Lookup.CategoryId
FROM Products INNER JOIN
Categories_Products_Lookup ON
Products.ProductId = Categories_Products_Lookup.ProductId
WHERE Active = 1 AND tProduct.Name like '%'+@Keyword+'%')
UNION
(SELECT Products.ProductId, Name, Introduction, Description, Active,
Material, Colour, Dimensions, Photo, Price, DisplayOrder, FriendlyURL,
ProductReference, Categories_Products_Lookup.CategoryId
FROM ProductsINNER JOIN
Categories_Products_Lookup ON
Products.ProductId = Categories_Products_Lookup.ProductId
WHERE Active = 1 AND Products.Description like '%'+@Keyword+'%')
3 Réponses :
Utilisez quelque chose comme 'Cast (description comme Nvarchar (2000)) comme description' au lieu des noms de champ Ntext. P>
Salut Arvo, j'ai essayé votre suggestion et a remplacé toutes les références à la description avec cette déclaration de distribution, mais elle apparaît avec la même erreur: Le type de données NTEXT ne peut pas être sélectionné comme distinct car il n'est pas comparable code>
@Deadly appliquer le même couler sur matériau code> également (et tout autre texte code> code> impliqué dans l'opération code> Union code>)
Salut Arvo, merci pour la réponse. Je suis sûr que cela aurait travaillé, mais celui ci-dessus offrait une solution que je pouvais comprendre. À votre santé. :)
des commentaires. Il semble que c'est ce dont vous avez besoin.
SELECT Products.ProductId, Name, Introduction, Description, Active, Material, Colour, Dimensions, Photo, Price, DisplayOrder, FriendlyURL, ProductReference, Categories_Products_Lookup.CategoryId FROM Products INNER JOIN Categories_Products_Lookup ON Products.ProductId = Categories_Products_Lookup.ProductId WHERE Active = 1 AND ( Products.Description like '%' + @Keyword + '%' or Products.Name like '%' + @Keyword + '%' ) ORDER BY CASE WHEN Products.Name like '%' + @Keyword + '%' THEN 0 ELSE 1 END
Tu es un génie! Je pense que je peux t'aimer! : D Merci beaucoup.
Cette réponse est pour d'autres comme moi qui n'aura pas de problèmes avec des lignes en double. P>
Voir le Documentation pour l'opérateur de l'Union < / a>. p> Union Tout code> est probablement ce que vous voulez. p>
Solution parfaite! Je n'ai pas eu de problème en double.
Sur quelle version de SQL Server êtes-vous sur? Si 2005+ êtes-vous capable de modifier le type de données de la colonne en
NvarchaRar (max) Code>?
ntext code> est obsolète et difficile à travailler avec.
NvarchaRar (Max) Code> est son remplacement. Y a-t-il également une raison spécifique pour laquelle vous utilisez
Union code> ici plutôt que
ou code>?
Bonjour Martin, j'utilise 2008 R2. Cependant, je ne pense pas que je puisse changer le type de données. Il y a un système complet de celui-ci et je ne sais pas quels effets frappants il aura à d'autres domaines. Qu'est-ce qui utiliserait ou faire? Je souhaite obtenir des résultats des deux sélectionneurs mais j'ai le choix de "Nom" qui sortez sur le dessus.
Eh bien, votre requête postée est un peu confus et invalide comme une branche mentionne une branche
TPRODUCT code> dans le
où code> mais il n'y a pas de ce tableau dans le
de code> et le autre
produits code> mais en supposant qu'ils sont la même table.
où actif = 1 et (produits.description comme "%" + @ @ keyword + '%') ou des produits.name Comme '%' + @ keyword + '%') code> ferait la même chose sans avoir à Scannez la table et effectuez la jointure deux fois, puis fusionnez les deux résultats.
Désolé, oui, la table TPRODUCT & Products est la même. J'ai légèrement édité avant de poster et j'ai manqué quelques changements. Il suffit de tester le ou - il ramène les résultats ok, mais dans le mauvais ordre. Je souhaite des lignes avec le mot-clé «Nom 'pour être au-dessus de TOUT i> Autres lignes. Le semble produire des résultats dans l'ordre d'identité.
La commande souhaitée ne se produirait pas avec votre requête code> Union Code>, soit même si vous avez fait une distribution pour le faire fonctionner.
Il semblait travailler dans des tests lorsque j'ai utilisé
Union tout code>. Il a placé des lignes avec le mot-clé dans le "nom" au-dessus des lignes avec le mot-clé dans 'Description'. Le problème est que si le mot clé est trop vague et retire beaucoup de résultats dans lesquels le mot clé est dans le nom, la description et dans le nom et la description. Il ajoute des lignes en double pour ce dernier.
Lorsque vous remplacez
Union tout code> avec
Union code> ils seront réinstallés dans le processus d'élimination en double. (Il n'est pas réellement garanti d'être le cas de
Union tout code> non plus)