2015-05-21 4 views
1

У меня есть таблица «формы» с заголовком «title». Внутри моей хранимой процедуры я создаю временную таблицу «# temp1» с помощью столбца «searchVals».Выбор на основе строки, содержащей одну или многие другие строки

Несколько строк анализируются в хранимой процедуре, число строк является переменной.

То, что я пытаюсь достичь, - это выбор строки, если «заголовок» содержит один или несколько «searchVal». Но я еще не смог достичь этого.

Например что-то вроде этого

SELECT title FROM #temp1 WHERE title IN ('%'+(SELECT searchVal FROM #temp1)+'%')

Этот вопрос, очевидно, что в не допускает подстановочных знаков, но если он сделал, это тип результата я пытаюсь добиться. Сборка ORs также не работает, так как количество строк в # temp1 является переменной. Предикат и поиск в свободном тексте не работают, поскольку база данных форм не индексируется соответствующим образом.

Я придумал то, что, по моему мнению, является правильным решением, но я не могу построить его правильно. Функция вызывается из предложения WHERE и возвращает логическое значение. Извините, если на это было дано ответ в другом месте, я искал экстенсивно. Ниже представлено мое предлагаемое решение с псевдокодом, где я не уверен в сменном SQL-коде.

DECLARE FUNCTION dbo.checkVal(searchVal column, formTitle varchar) 
RETURNS boolean 
AS 
BEGIN 
    WHILE (not end of column) 
     IF formTitle LIKE '%'+searchVal+'%' 
      RETURN true 
     END 
    END 
RETURN FALSE 
END 

Извините за мой непоследовательный и неправильный код SQL. Я был бы признателен за любые предложения или исправления, которые заставили бы мой код работать. Также приветствуются лучшие решения. Спасибо.

+0

Можете ли вы предоставить образцы данных и ожидаемый результат? –

ответ

0

Как насчет того, чтобы проверить каждый ряд форм на EXISTS()?

SELECT * 
FROM forms f 
WHERE EXISTS 
(
    SELECT * 
    FROM #temp1 
    WHERE f.title LIKE '%' + searchVals + '%' 
) 
0

Вы можете использовать оператор LIKE в JOIN заявление:

SELECT DISTINCT f.* 
FROM forms f 
JOIN #temp1 t ON f.title LIKE '%' + t.column + '%' 

Но имейте в виду, что с помощью LIKE оператор приходит с падением производительности, так что вы хотите, чтобы уменьшить количество строк в формах таблицу с использованием предложения where, если это возможно

Смежные вопросы