2012-02-10 34 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

我寫了一個CTE使用SQL Server 2008中使用我寫以指示匹配的文本是FindInString()函數找到。 0 =未發現:

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

我現在需要做的,就是通過這個結果在一個循環,我將履行根據各行的一些額外的邏輯設定迭代。

我已經看到了一些循環的例子,但我寧願不使用遊標。

解決此問題的最佳方法是什麼?

謝謝。

- UPDATE -

一旦匹配,所述匹配行的ID被添加到表中,如果它不存在,則返回值被附加到一個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 

這必須從CTE每一個匹配TriggerValue進行。

+1

你可以提供一些關於你的循環會做什麼的信息嗎? 'CURSORS'和'WHILE'循環幾乎適用於迭代邏輯,但是10次中有9次可以找到基於集合的方法,這種方法效率更高。 SQL喜歡處理大量數據,而不是單個記錄。 – JNK 2012-02-10 13:51:19

+0

@JNK - 基於響應集中的3條記錄,基於集合的方法對於我想要做的是什麼樣的? – ElHaix 2012-02-11 04:51:10

回答

0

使用CTE結束,將值添加到臨時表,然後遍歷結果並執行一些邏輯。