Non credo sia una ricerca full-text ti aiuterebbe. Sembra che tu stia cercando qualsiasi frammento anche come termini tecnici come /1/
.
Prova questo per XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Verificherà il text()
interno di qualsiasi nodo se contiene la frase di ricerca. Ma qualsiasi valore con un 1
viene trovato all'interno (ad es. qualsiasi numero non correlato che ha un 1
da qualche parte.) Potresti cercare text()="1"
ed esegui i contains
solo se la lunghezza della stringa supera un certo minimo.
Qualcosa come
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 è - fino ad ora - nient'altro che una stringa e deve essere analizzato. Con v2016 Microsoft ha introdotto il supporto JSON, ma sei su v2012. Il problema con un LIKE
la ricerca su una stringa JSON potrebbe essere quella di trovare 1 anche come parte del nome di un elemento. Il resto è come sopra...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';