Jeśli naprawdę chcesz zdefiniować podobieństwo dokładnie w taki sposób, w jaki sformułowałeś w swoim pytaniu, to – jak mówisz – musiałbyś zaimplementować obliczanie odległości Levenstheina. Albo w kodzie obliczonym na każdym wierszu pobranym przez DataReader, albo jako funkcja SQL Server.
Podany problem jest w rzeczywistości bardziej skomplikowany, niż może się wydawać na pierwszy rzut oka, ponieważ nie można zakładać, że wiesz, co jest wzajemnie udostępniane elementy między dwoma ciągami mogą być.
Więc oprócz Levensthein Distance prawdopodobnie chcesz również określić minimalną liczbę następujących po sobie znaków, które faktycznie muszą pasować (aby można było stwierdzić wystarczające podobieństwo).
Podsumowując:brzmi to jak zbyt skomplikowane i czasochłonne/powolne podejście.
Co ciekawe, w SQL Server 2008 masz funkcję DIFFERENCE, która może być używane do czegoś takiego.
Ocenia wartość fonetyczną dwóch ciągów i oblicza różnicę. Nie jestem pewien, czy będzie działał poprawnie w przypadku wyrażeń wielowyrazowych, takich jak tytuły filmów, ponieważ nie radzi sobie dobrze ze spacjami lub liczbami i kładzie zbyt duży nacisk na początek ciągu, ale nadal jest interesujący orzeczenie, o którym należy być świadomym.
Jeśli to, kim jesteś faktycznie próbując opisać to jakiś rodzaj funkcji wyszukiwania, powinieneś zajrzeć do możliwości wyszukiwania pełnotekstowego SQL Server 2008. Zapewnia wbudowaną obsługę tezaurusa, fantazyjne predykaty SQL i mechanizm rankingowy dla "najlepszych dopasowań"
EDYCJA:Jeśli chcesz wyeliminować duplikaty, możesz zajrzeć do SSIS Fuzzy Lookup i Fuzzy Group Transformation. Sam tego nie próbowałem, ale wygląda to na obiecujący trop.
EDIT2:Jeśli nie chcesz zagłębiać się w SSIS i nadal masz problemy z wydajnością algorytmu Levensthein Distance, być może możesz wypróbować ten algorytm, który wydaje się być mniej złożony.