Меньше повторений в выражениях where при запросе большого количества столбцов - PullRequest
1 голос
/ 29 октября 2009

Взять стандартный широкий поисковый запрос ...:

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 ]

1 голос
/ 29 октября 2009

Вы можете создать вид как:

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 голосов
/ 17 ноября 2009
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
0 голосов
/ 17 ноября 2009

Похоже, ответ "Нет".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...