Je ne pense pas qu'une recherche plein texte vous aiderait. Il semble que vous recherchiez n'importe quel fragment, même des termes techniques tels que /1/ .
Essayez ceci pour XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Il vérifiera le text() interne de n'importe quel nœud s'il contient la phrase de recherche. Mais toute valeur avec un 1 à l'intérieur est trouvé (par exemple, tout nombre sans rapport qui a un 1 quelque part.) Vous pouvez rechercher text()="1" et effectuer le contains uniquement si la longueur de la chaîne dépasse un certain minimum.
Quelque chose comme
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 n'est - jusqu'à présent - rien de plus qu'une chaîne et doit être analysé. Avec la v2016, Microsoft a introduit le support JSON, mais vous êtes sur la v2012. Le problème avec un LIKE rechercher sur une chaîne JSON pourrait être que vous trouveriez le 1 même en tant que partie du nom d'un élément. Le reste est comme ci-dessus...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';