【问题标题】:How to retrieve multiple values when more than one string matches with TSQL?当多个字符串与 TSQL 匹配时如何检索多个值?
【发布时间】:2012-02-10 08:13:35
【问题描述】:

考虑包含的表

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 编写了一个 CTE,该 CTE 使用我编写的 FindInString() 函数来指示找到匹配文本的位置。 0 = 未找到:

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

我现在需要做的是在一个循环中遍历这个结果集,在这个循环中我将根据每一行执行一些额外的逻辑。

我见过一些循环的例子,但我宁愿不使用游标。

解决这个问题的最佳方法是什么?

谢谢。

-- 更新--

一旦匹配,匹配行的 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 执行此操作。

【问题讨论】:

  • 你能提供更多关于你的循环将做什么的信息吗? CURSORSWHILE 循环非常适用于迭代逻辑,但是十分之九你可以找到一种更有效的基于集合的方法。 SQL 喜欢处理大量数据,而不是单个记录。
  • @JNK - 根据响应集中的 3 条记录,对于我正在尝试做的事情,基于集合的方法会是什么样子?

标签: loops sql-server-2008-r2 common-table-expression


【解决方案1】:

最终使用 CTE,将值添加到临时表,然后遍历结果并执行一些逻辑。

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 2021-12-29
    • 2017-11-03
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多