Рассмотрим таблицу, содержащуюКак получить несколько значений, когда несколько строк соответствуют 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 от КТР.
Можете ли вы дать дополнительную информацию о том, что будет делать ваша петля? Циклы «CURSORS» и «WHILE» в значительной степени относятся к итеративной логике, но в 9 раз из 10 вы можете найти подход, основанный на наборе, который работает намного эффективнее. SQL нравится работать с большими наборами данных, а не с отдельными записями. – JNK
@JNK - Основываясь на 3 записях в наборе ответов, как выглядит подход, основанный на наборе, для того, что я пытаюсь сделать? – ElHaix