Nie sądzę, aby wyszukiwanie pełnotekstowe pomoże. Wygląda na to, że szukasz dowolnego fragmentu, nawet takiego jak terminy techniczne, takie jak /1/
.
Wypróbuj to dla XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Sprawdzi wewnętrzne text()
dowolnego węzła jeśli zawiera wyszukiwaną frazę. Ale każda wartość z 1
znaleziono inside (np. dowolny niepowiązany numer, który ma 1
gdzieś.) Możesz wyszukać text()="1"
i wykonaj contains
tylko wtedy, gdy długość ciągu przekracza określone minimum.
Coś jak
WHERE xmldata.exist(N'//*[text()[1]=sql:variable("@SearchFor") or(string-length(text()[1])>=3 and contains(text()[1],concat("/",sql:variable("@SearchFor"),"/")))]')=1;
Json jest - do tej pory - niczym więcej niż łańcuchem i musi zostać przeanalizowany. Wraz z v2016 Microsoft wprowadził obsługę JSON, ale jesteś na v2012. Problem z LIKE
wyszukiwanie w ciągu JSON może polegać na tym, że znajdziesz 1 nawet jako część nazwy elementu. Reszta jest jak wyżej...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';