【发布时间】: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 执行此操作。
【问题讨论】:
-
你能提供更多关于你的循环将做什么的信息吗?
CURSORS和WHILE循环非常适用于迭代逻辑,但是十分之九你可以找到一种更有效的基于集合的方法。 SQL 喜欢处理大量数据,而不是单个记录。 -
@JNK - 根据响应集中的 3 条记录,对于我正在尝试做的事情,基于集合的方法会是什么样子?
标签: loops sql-server-2008-r2 common-table-expression