2012-02-10 3 views
0

Рассмотрим таблицу, содержащуюКак получить несколько значений, когда несколько строк соответствуют TSQL?

ReturnValueID | ReturnValue TriggerValue 
------------------------------------------ 
     1  | returnValue1 | testvalue 
     2  | returnValue2 | testing... 
     3  | returnValue3 | value3 

И дал строку: HERE IS THE TEXT testing... AND MORE TEXT testvalue MORE TEXT

Я написал КТР с помощью SQL Server 2008, который использует функцию FindInString() я написал, чтобы указать, где согласованный текст найденный. 0 = не найден:

1 | returnValue1 | 43 
2 | returnValue2 | 18 
3 | returnValue3 | 0 

Что мне нужно сделать сейчас, перебирать этого результирующего набора в цикле, где я буду выполнять дополнительную логику, основанную на каждой строке.

Я видел несколько примеров цикла, но я бы предпочел не использовать курсор.

Каков наилучший способ приблизиться к этому?

Спасибо.

- ОБНОВЛЕНИЕ -

После того, как найдено совпадение, то идентификатор согласованной строки добавляется в таблицу, если она уже не существует, то возвращаемое значение добавляется к VARCHAR значение, если оно уже не существует в динамической строке:

IF NOT EXISTS -- check if this value is already recorded 
(
    SELECT * 
    FROM RecordedReturnValue 
    WHERE ReturnValueID = @ReturnValueID 
) 
BEGIN 
    -- add the visitor/external tag ID to historical table 
    INSERT INTO RecordedReturnValue (...) 
    VALUES (...) 

    -- function checks if string is already present 
    SET @DynamicString = dbo.AppendDynamicOutput(@ReturnValue, @DynamicString) 
END 

Это должно быть выполнено для каждого согласованного TriggerValue от КТР.

+1

Можете ли вы дать дополнительную информацию о том, что будет делать ваша петля? Циклы «CURSORS» и «WHILE» в значительной степени относятся к итеративной логике, но в 9 раз из 10 вы можете найти подход, основанный на наборе, который работает намного эффективнее. SQL нравится работать с большими наборами данных, а не с отдельными записями. – JNK

+0

@JNK - Основываясь на 3 записях в наборе ответов, как выглядит подход, основанный на наборе, для того, что я пытаюсь сделать? – ElHaix

ответ

0

Закончен с использованием CTE, добавил значения в таблицу temp, затем повторил результаты и выполнил некоторую логику.

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