Jag tror inte att en fulltextsökning skulle hjälpa dig. Det verkar som om du letar efter vilket fragment som helst, även som tekniska termer som /1/
.
Prova detta för XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Den kontrollerar alla noders interna text()
om den innehåller sökfrasen. Men vilket värde som helst med en 1
insidan hittas (t.ex. alla orelaterade nummer som har en 1
någonstans.) Du kanske söker efter text()="1"
och utför contains
endast om strängens längd överstiger ett visst minimum.
Något liknande
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 är - hittills - inget annat än en sträng och måste tolkas. Med v2016 introducerade Microsoft JSON-stöd, men du är på v2012. Problemet med en LIKE
sökning på en JSON-sträng kan vara att du hittar 1:an även som en del av ett elements namn. Resten är enligt ovan...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';