0

基本的にあるテーブルの列値を別のテーブルの列値と比較し、最も近い一致を返すネストされたカーソルを作成しました。

テーブルの内容は次のとおりです。

(ColumnName と値は以下のとおりです) 表 A

**Names**
MandarinOrange
SweetApple
SourApple
AppleThatTasteslikeGrapes

表 B

**Names**
PlainOrange
SourOrange
Grapple
.
.
.

したがって、Cursor1 (外側のカーソル) は table1 から各名前を取得し、Table2 のすべての名前と比較して、最も近い一致を返します。Cursor2 (内側) は、テーブル 2 の名前を取得することです。

Cursorsを使用して同じ回避を実現する方法があるかどうかを確認しています(遅すぎるため)

4

1 に答える 1

0

カーソルを避けることは常により良い習慣であり、あなたの場合、それも達成可能だと思います。その鍵となるのは、比較結果を評価するために実行する計算です。

1 つの解決策は、2 つの文字列を受け取り、比較結果として 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 に答える