2009-10-29 4 views
1

Prenez une requête standard large de recherche ...:répétition où les clauses-lors de l'interrogation de colonnes

DECLARE @sq Varchar(50) = 'Desperate' 

SELECT * 
FROM [UnbelievablyHotWomenOrAtLeastAcceptable] u 
WHERE 
u.Address LIKE '%' + @sq + '%' OR 
u.City LIKE '%' + @sq + '%' OR 
u.firstname LIKE '%' + @sq + '%' OR 
u.Lastname LIKE '%' + @sq + '%' OR 
u.Email LIKE '%' + @sq + '%' OR 
u.Notes LIKE '%' + @sq + '%' 

est-il un moyen de faire cette requête moins d'un effort de copie + pâte?

Quelque chose le long des lignes de

...WHERE (u.Address OR u.City OR u.firstname OR u.Lastname OR u.Email OR u.Notes) LIKE '%' + @sq + '%' 

Je sais que si j'utiliser la recherche en texte intégral, CONTIENT et CONTAINSTABLE me propose une syntaxe pour effectuer des requêtes toutes les colonnes de la table, qui sont dans le catalogue en texte intégral à la fois, mais ce n'est pas ce que je cherche.

+2

+1 pour un nom de table très approprié – JustLoren

Répondre

0

On dirait que la réponse est "Non".

1

Vous pouvez créer une vue comme:

CREATE VIEW dbo.UnbelievablyHotView 
AS 
SELECT id, Address as val FROM dbo.UnbelievablyHotWomen 
UNION ALL 
SELECT id, City as val FROM dbo.UnbelievablyHotWomen 
UNION ALL 
SELECT id, firstname as val FROM dbo.UnbelievablyHotWomen 
UNION ALL 
... 

Et puis interroger sur ce avec:

SELECT * 
FROM UnbelievablyHotView 
WHERE val like '%' + @sq + '%' 

Cela n'économiserait copier & coller si vous faites la requête en plusieurs endroits.

0
SELECT * 
FROM [UnbelievablyHotWomenOrAtLeastAcceptable] u 
WHERE (
     SELECT TOP 1 str 
     FROM (
       SELECT Address AS Str 
       UNION ALL 
       SELECT City 
       UNION ALL 
       SELECT Firstname 
       UNION ALL 
       SELECT Lastname 
       UNION ALL 
       SELECT Email 
       UNION ALL 
       SELECT Notes 
       ) q 
     WHERE str LIKE '%' + @sq + '%' 
     ) IS NOT NULL 
Questions connexes