Saya tidak berpikir bahwa pencarian teks lengkap akan membantu Anda. Sepertinya Anda mencari fragmen apa pun bahkan seperti istilah teknis seperti /1/
.
Coba ini untuk XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Ini akan memeriksa setiap text()
internal node mana pun jika berisi frasa pencarian. Tetapi nilai apa pun dengan 1
di dalam ditemukan (mis. nomor yang tidak terkait yang memiliki 1
di suatu tempat.) Anda mungkin mencari text()="1"
dan lakukan contains
hanya jika panjang string melebihi minimum tertentu.
Sesuatu seperti
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 adalah - hingga sekarang - tidak lebih dari string dan harus diuraikan. Dengan v2016 Microsoft memperkenalkan dukungan JSON, tetapi Anda menggunakan v2012. Masalah dengan LIKE
pencarian pada JSON-string mungkin, bahwa Anda akan menemukan 1 bahkan sebagai bagian dari nama elemen. Selebihnya seperti di atas...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';