Jeg tror ikke, at en fuldtekstsøgning ville hjælpe dig. Det ser ud til, at du leder efter et hvilket som helst fragment, selv såsom tekniske termer som /1/
.
Prøv dette til XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Den vil kontrollere enhver nodes interne text()
hvis den indeholder søgesætningen. Men enhver værdi med en 1
inde er fundet (f.eks. ethvert ikke-relateret tal, der har en 1
et eller andet sted.) Du kan søge efter text()="1"
og udfør contains
kun hvis strenglængden overstiger et vist minimum.
Noget lignende
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 er - indtil nu - ikke andet end en streng og skal parses. Med v2016 introducerede Microsoft JSON-understøttelse, men du er på v2012. Problemet med en LIKE
søgning på en JSON-streng kan være, at du vil finde 1'eren selv som en del af et elements navn. Resten er som ovenfor...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';