Nemyslím si, že jde o fulltextové vyhledávání by vám pomohl. Zdá se, že hledáte jakýkoli fragment, dokonce i technické výrazy jako /1/
.
Zkuste to pro XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Zkontroluje interní text()
libovolného uzlu pokud obsahuje hledanou frázi. Ale jakákoli hodnota s 1
uvnitř (např. jakékoli nesouvisející číslo, které má 1
někde.) Můžete hledat text()="1"
a proveďte contains
pouze pokud délka řetězce překročí určité minimum.
Něco jako
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 není – až dosud – nic víc než řetězec a musí být analyzován. Ve verzi 2016 společnost Microsoft zavedla podporu JSON, ale vy jste na verzi 2012. Problém s LIKE
vyhledávání na řetězci JSON může být, že byste našli 1 i jako součást názvu prvku. Zbytek je jako výše...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';