我已经建立了一个这样的T-SQL查询:
DECLARE @search nvarchar(1000) = 'FORMSOF(INFLECTIONAL,hills) AND FORMSOF(INFLECTIONAL,print) AND FORMSOF(INFLECTIONAL,emergency)' SELECT * FROM Tickets WHERE ID IN ( -- unioned subqueries using CONTAINSTABLE ... )
此搜索的GUI将是一个aspx页面,其中包含用户可以搜索的单个文本框.
我打算以某种方式构建搜索词,就像上面的例子(@search).
但我有一些担忧:
>示例搜索项是否在搜索中包含所有单词的最佳或唯一方法?
>我应该分开单词并在C#或T-sql中构造搜索项.我倾向于倾向于C#进行决策/循环/构建,但是我想要你的意见.
>我讨厌建立sql,因为注入的风险.我该怎么防范这个?
>我应该用FREETEXTTABLE吗?有没有办法使FREETEXT寻找所有的单词而不是任何的?
一般来说,你还会怎么做?
解决方法
我最近使用全文搜索,所以我会尝试回答你的一些问题.
•“我讨厌由于注入风险而动态构建sql,我该如何防范?
我使用像这样的消毒方法:
static string SanitizeInput(string searchPhrase) { if (searchPhrase.Length > 200) searchPhrase = searchPhrase.Substring(0,200); searchPhrase = searchPhrase.Replace(";"," "); searchPhrase = searchPhrase.Replace("'"," "); searchPhrase = searchPhrase.Replace("--"," "); searchPhrase = searchPhrase.Replace("/*"," "); searchPhrase = searchPhrase.Replace("*/"," "); searchPhrase = searchPhrase.Replace("xp_"," "); return searchPhrase; }
•我应该使用FREETEXTTABLE吗?有没有办法使FREETEXT寻找所有的单词而不是任何的?
我使用FREETEXTTABLE,但我需要任何一个字.就像我已经读过的一样(我已经读了很多),你必须使用CONTAINSTABLE来搜索所有的单词或不同的组合. FREETEXTTABLE似乎是更轻的解决方案,但是当您想要更深入的自定义时,它不是选择的.