查询多列时where-clauses的重复次数减少

时间:2009-10-29 15:01:24

标签: sql-server tsql

采用标准的广泛搜索查询...:

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

我知道如果我使用全文搜索,CONTAINS和CONTAINSTABLE为我提供了一种查询表中所有列的语法,这些列一次出现在全文目录中,但这不是我想要的。

3 个答案:

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

这只会保存副本和如果您在多个地方进行查询,请粘贴。

答案 1 :(得分:0)

似乎答案是“不”。

答案 2 :(得分: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