2009-10-29 34 views
1

以一個標準的廣泛搜索查詢...:少重複在子句查詢時多列

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 + '%' 

有沒有一種方法,使查詢更少副本+粘貼的努力?

沿

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

行我知道,如果我使用全文搜索什麼東西,包含和CONTAINSTABLE我提供了一個語法查詢表中的所有列,這是在全文目錄一次,但這不是我所期待的。

+2

+1非常適合的表名 – JustLoren

回答

0

似乎答案是「否」。

1

您可以創建類似的觀點:

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 
... 

再搭配上查詢:

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

這隻會保存複製粘貼&如果你在多個地方查詢。

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