Я пытаюсь достичь чего-то, что я не уверен, как это сделать. Я работаю над сайтом, основанным на ASP Classic и SQL 2008, IIS7. На странице поиска у меня есть возможность иметь значение пары для каждого запроса, например default.asp?q=one|two|three&q2=four|five|six
.
Что я пытаюсь сделать, так это использовать подстановочный знак, если мои запросы не имеют значения и имеют возможность искать слово в одном столбце одновременно, если мой запрос имеет значение в пару. Вот что я хочу сделать:SQL-запрос с множественным значением
- Если запрос значения затем отлично, что в базе данных (которая является довольно простым)
- Если запрос пара значения разделенным «|» затем разделите их и найдите все.
- Если запрос вообще не имеет значения, используйте подстановочный знак и не используйте для чего-либо.
Чтобы достичь этого, я пробовал пару вещей, но не получил никакого успеха. Вот пример моего кода.
Один -----------
@style nVarchar(150) = ''
Select * FROM mytable WHERE CONTAINS(style, @style) AND ...
я могу управлять, чтобы разбить запрос на что-то вроде '"* value1 *" OR "* value2 *"'
, чтобы получить лучший результат из СОДЕРЖИТ, но если «стиль Это один работает «имеет значение. Если стиль не имеет значения, нет подстановочного знака, поэтому я могу извлечь все данные без фильтрации базы данных.
Два ---------------
@style nVarchar(150) = ''
Select * FROM mytable WHERE style LIKE '%' + @style + '%' AND ...
С LIKE статьи я могу использовать подстановочные как '%'
в случае, если стиль не имеет никакого значения, но я не могу искать пары значение в той же колонке.
Итак, имейте в виду, что я использую «Хранимую процедуру», так как это довольно сложно, и мне нужно использовать это в двух местах. У меня будет запрос 10-12 для этого поиска.
Любая идея поможет мне добиться этого.
Спасибо за ваше время. Это помогает, но вы любезно объясните ВНЕШНЮЮ ПРИМЕНИМОСТЬ? Как то, что произошло в строке «SELECT c.value (« text() [1] »,« varchar (50) ») AS v FROM @ v.nodes ('// n') AS t (c)". Большое спасибо. – Jay
OUTER или CROSS APPLY - это оператор, который позволяет вызывать функцию таблицы для каждой строки, возвращаемой запросом. Проверьте [документацию] (http://msdn.microsoft.com/en-us/library/ms175156 (v = SQL.90) .aspx) в электронной документации по SQL Server, это хорошо объяснено там. Подзапрос SELECT c.value ... используется для извлечения набора строк из Xml, созданного на основе значения «value1 | value2 | value3». Функция nodes() возвращает узлы, указанные XPath "// n" и c.value ('text() [1]' ...) извлекает текст. Индекс [1] требуется методом value() для указания первого текстового узла. –
спасибо для объяснения. Я продолжу читать эту документацию. Если у меня есть запрос на пару, мне нужно дублировать это время на мои запросы? – Jay