使用下面的select,如果传入空字符串,我会收到以下错误:Null或空的全文谓词 从数据库中获取行时,在我的DBAdapter中。如果我提供一个值,例如Well,那么当我应该在r。[Desc]列中时,我不会得到结果。如果我传入Well One,我会得到:在全文搜索条件中“一个”附近的语法错误'好一个'。
如果我通过One,我什么也得不到。
我在这里读过类似的问题,并没有看到传入的值可能无效的模式,列数据的开头,列数据中间的单词或任何顺序的多个单词列数据。我认为如果列包含传入的值或部分值,Contains将返回该行。
我做错了什么?
if @Drawing = ''
set @Drawing = null
if @ItemName = ''
set @ItemName = null
if @CF3 = ''
set @CF3 = null
if @Desc = ''
set @Desc = null
if @Design = ''
set @Design = null
if @MaxPSI = 0
set @MaxPSI = null
Select distinct
,r.[DRAWING]
,r.[DESC]
,r.[OP_PSI]
,r.[MAX_PSI]
,r.[MAX_TEMP]
,r.[Insulated]
,r.[DESIGN]
From Ref r
inner join Eng e on e.[DRAWING] = r.[DRAWING]
where r.SurveyNumber = @SurveyNumber
And (rtrim(@Drawing) is NUll or rtrim(r.DRAWING) like rtrim(@Drawing) + '%')
And (rtrim(@Design) is NUll or rtrim(r.DESIGN) like rtrim(@Design) + '%')
And (rtrim(@MaxPSI) is NUll or rtrim(r.MAX_PSI) like rtrim(@MaxPSI) + '%')
And (rtrim(@CF3) is NUll or rtrim(e.CF3) like rtrim(@CF3) + '%')
And (rtrim(@ItemName) is NUll or rtrim(e.ITEM_NAME) like rtrim(@ItemName) + '%')
AND ((@Desc = '""') OR CONTAINS( (r.[Desc]), @Desc))
答案 0 :(得分:0)
我认为您可以尝试按如下方式检查空:
AND ((@Desc = '""' OR @Desc = '') OR CONTAINS( (r.[Desc]), @Desc))
我怀疑空谓词可能会以''
而不是""
传递。
没有使用Contains
,但是从文档[here][1]
中的部分开始,您似乎需要在单词之间使用运算符,或者需要用双引号""
包装表达式。所以你可以做的就是尝试传递这样的参数:
AND ((@Desc = '""' OR @Desc = '') OR CONTAINS( (r.[Desc]), '"'+@Desc+'"'))
答案 1 :(得分:0)
可能的目的是什么
rtrim(@Drawing) is NUll
如果它为NULL,则rtrim没有意义。除了字符串的比较基本上是一个rtrim。