-- Skrypt pobrany ze strony http://strefa.guzowski.info -- Opis do kodu: -- http://strefa.guzowski.info/archives/30,2006,12,13.html CREATE FUNCTION dbo.FnCalculateLD_TSQL (@wiersz1 int, @wiersz2 int) RETURNS int AS BEGIN -- pola DECLARE @c INT, @result NUMERIC(10,5), @nazwa_glowna_A NVARCHAR(100), @nazwa_skr_A NVARCHAR(100), @miejscowosc_A NVARCHAR(100), @adres_A NVARCHAR(100), @nr_lokalu_A NVARCHAR(100), @nip_A NVARCHAR(100), @kod_poczt_A NVARCHAR(100), @nazwa_glowna_B NVARCHAR(100), @nazwa_skr_B NVARCHAR(100), @miejscowosc_B NVARCHAR(100), @adres_B NVARCHAR(100), @nr_lokalu_B NVARCHAR(100), @nip_B NVARCHAR(100), @kod_poczt_B NVARCHAR(100); SET @c = 0; SET @result = 0.0; SET @nazwa_glowna_A = ''; SET @nazwa_skr_A = ''; SET @miejscowosc_A = ''; SET @adres_A = ''; SET @nr_lokalu_A = ''; SET @nip_A = ''; SET @kod_poczt_A = ''; SET @nazwa_glowna_B = ''; SET @nazwa_skr_B = ''; SET @miejscowosc_B = ''; SET @adres_B = ''; SET @nr_lokalu_B = ''; SET @nip_B = ''; SET @kod_poczt_B = ''; -- pobranie danych SELECT TOP 1 @nazwa_glowna_A = nazwa_glowna, @nazwa_skr_A = nazwa_skr, @miejscowosc_A = miejscowosc, @adres_A = adres, @nr_lokalu_A = nr_lokalu, @nip_A = nip, @kod_poczt_A = kod_poczt FROM Dane_adresowe WHERE wiersz IN (@wiersz1, @wiersz2) ORDER BY wiersz; SELECT TOP 2 @nazwa_glowna_B = nazwa_glowna, @nazwa_skr_B = nazwa_skr, @miejscowosc_B = miejscowosc, @adres_B = adres, @nr_lokalu_B = nr_lokalu, @nip_B = nip, @kod_poczt_B = kod_poczt FROM Dane_adresowe WHERE wiersz IN (@wiersz1, @wiersz2) ORDER BY wiersz; -- obliczenie wyniku (funkcja LD to standardowa implementacja -- Levenshtein-Distance w T-SQLu, dostepna w sieci: -- http://www.merriampark.com/ldtsql.htm) RETURN (dbo.LD(@nazwa_glowna_A, @nazwa_glowna_B) + dbo.LD(@nazwa_skr_A, @nazwa_skr_B) + dbo.LD(@miejscowosc_A, @miejscowosc_B) + dbo.LD(@adres_A, @adres_B) + dbo.LD(@nr_lokalu_A, @nr_lokalu_B) + dbo.LD(@nip_A, @nip_B) + dbo.LD(@kod_poczt_A, @kod_poczt_B)); END