0

我创建了嵌套游标,它基本上将一个表的列值与另一个表的列值进行比较并返回最接近的匹配项。

表格的内容是:

(ColumnName 和 Values 如下) 表 A

**Names**
MandarinOrange
SweetApple
SourApple
AppleThatTasteslikeGrapes

表 B

**Names**
PlainOrange
SourOrange
Grapple
.
.
.

因此 Cursor1(外部光标)从 table1 中获取每个名称,并与 Table2 中的所有名称进行比较并返回最接近的匹配项。Cursor 2(内部)是检索表 2 中的名称

我想看看,是否有办法使用游标实现相同的避免(因为它太慢了)

4

1 回答 1

0

避免使用游标始终是一种更好的做法,在您的情况下,我认为它也是可以实现的。它的关键是您为了评估比较结果而执行的计算。

一种解决方案是创建一个函数,接收两个字符串并返回一个 1/0 值作为比较结果。然后您可以调用该函数作为 SELECT 语句的一部分并保存游标迭代。

以下是此类函数的示例:

CREATE FUNCTION fn_Compare
(
    @firstValue     varchar(50),
    @secondValue    varchar(50)
)
RETURNS bit
AS
BEGIN
    DECLARE @Result bit
    SET @Result = 0 --False by default

    --!Here goes your specific logic for comparing string!  
    IF @firstValue = @secondValue
        SET @Result = 1

    RETURN @Result

END
GO

--Use it in a sentance
SELECT dbo.fn_Compare('TEST', 'TEST') AS Match --True
SELECT dbo.fn_Compare('TEST', 'TEST2') AS Match --False

--Use it in a query
SELECT 
    name,
    name,
    dbo.fn_Compare(name, name) AS Match
FROM sysobjects
WHERE 
    Type = 'u'

--Cleanup
DROP FUNCTION fn_Compare

我希望这有帮助。

于 2012-04-30T11:08:25.550 回答