Ich glaube nicht, dass eine Volltextsuche würde dir helfen. Anscheinend suchen Sie nach irgendeinem Fragment, sogar nach Fachbegriffen wie /1/
.
Versuchen Sie dies für XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Es prüft den internen text()
jedes Knotens wenn es den Suchbegriff enthält. Aber jeder Wert mit einem 1
innerhalb gefunden wird (z. B. jede nicht zusammenhängende Nummer, die eine 1
hat irgendwo.) Sie könnten nach text()="1"
suchen und führen Sie die contains
aus nur wenn die Stringlänge ein bestimmtes Minimum überschreitet.
So etwas wie
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 ist – bis jetzt – nichts anderes als ein String und muss geparst werden. Mit v2016 hat Microsoft die JSON-Unterstützung eingeführt, aber Sie befinden sich auf v2012. Das Problem mit einem LIKE
Suche nach einem JSON-String könnte sein, dass Sie die 1 sogar als Teil des Namens eines Elements finden würden. Der Rest ist wie oben...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';