Ik denk niet dat een zoekopdracht in volledige tekst zou je helpen. Het lijkt erop dat u op zoek bent naar een fragment, zelfs naar technische termen als /1/
.
Probeer dit voor XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Het zal de interne text()
van elk knooppunt controleren als het de zoekterm bevat. Maar elke waarde met een 1
binnenkant is gevonden (bijv. elk niet-gerelateerd nummer met een 1
ergens.) Je zou kunnen zoeken naar text()="1"
en voer de contains
. uit alleen als de stringlengte een bepaald minimum overschrijdt.
Iets als
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 is - tot nu toe - niets meer dan een string en moet geparseerd worden. Met v2016 introduceerde Microsoft JSON-ondersteuning, maar je zit op v2012. Het probleem met een LIKE
zoeken op een JSON-string zou kunnen zijn, dat je de 1 zelfs zou vinden als een onderdeel van de naam van een element. De rest is zoals hierboven...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';