• I've renamed the pure SQL functions somewhat, but here's an example of how I would call them from a stored procedure:

    DECLARE @result FLOAT

    SET @result = CalculateJaroWinkler('Bob','Bill')

    PRINT @result

    SET @result = CalculateJaroWinkler('Bob','Bub') --0.7999

    PRINT @result

    SET @result = CalculateJaroWinkler('Barnes','Banres') --0.9555

    PRINT @result

    Alternately, for a very primitive table compare example:

    DECLARE @JaroThreshold FLOAT

    SET @JaroThreshold = 0.9

    SELECT top 500 LEFT(MyWord,2) AS LeftTwo, MyWord AS Word

    INTO #tempA

    FROM MyListOfWords

    WHERE MyWord LIKE '__a%'

    ORDER BY MyWord

    ALTER TABLE #tempA ADD CONSTRAINT [PK_tempA] PRIMARY KEY CLUSTERED

    (

    [Word] ASC

    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]

    GO

    SELECT top 500 LEFT(MyWord,2) AS LeftTwo, MyWord AS word

    INTO #tempB

    FROM MyListOfWords

    WHERE MyWord LIKE '__a%'

    ORDER BY MyWord

    ALTER TABLE #tempB ADD CONSTRAINT [PK_tempB] PRIMARY KEY CLUSTERED

    (

    [Word] ASC

    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]

    GO

    SELECT a.word, b.word, CalculateJaroWinkler(a.word,b.word)

    FROM #tempA a

    INNER JOIN #tempB b

    ON b.LeftTwo = a.LeftTwo

    AND b.Word <> a.Word

    WHERE CalculateJaroWinkler(a.word,b.word) > @JaroThreshold

    DROP TABLE #tempA

    DROP TABLE #tempB