我正在我的查询中构建一个案例,如果某个字段为空或者子字符串“Name Not Found”,则该字段应替换为另一个字段的值。
这是我到目前为止:
CASE WHEN [Salesperson1 Name] = '' THEN [Salesperson Name (Primary)]
WHEN CONTAINS([Salesperson1 Name], 'Name Not Found') THEN [Salesperson Name (Primary)]
ELSE [Salesperson1 Name]
END,
但是当我运行查询时,我得到了这样的信息:
Msg 7601, Level 16, State 2, Line 19
Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'staging_leads_rr' because it is not full-text indexed.
我怎么能这样做?我究竟做错了什么?我不确定错误消息的含义,因为我不熟悉在T-SQL中编写内容。
答案 0 :(得分:0)
您可以尝试使用CONTAINS
运算符替换LIKE
的来电:
CASE WHEN [Salesperson1 Name] = ''
THEN [Salesperson Name (Primary)]
WHEN [Salesperson1 Name] LIKE '%Name Not Found%'
THEN [Salesperson Name (Primary)]
ELSE [Salesperson1 Name]
END
如果您真的想使用CONTAINS
,则必须在[Salesperson1 Name]
列q.v上创建全文索引。 this helpful SO post
答案 1 :(得分:0)
包含功能与SQL Server的全文搜索功能相关,更适合大规模文本处理。请参阅此处的参考:https://msdn.microsoft.com/en-us/library/ms142571.aspx
为了做到这一点,你应该使用更像charindex函数的东西,如果确实找到了字符串,则返回与搜索字符串的第一个字符位置相关的正值,否则返回0:https://msdn.microsoft.com/en-us/library/ms186323.aspx
然后你的查询会更像这样;
CASE WHEN [Salesperson1 Name] = '' THEN [Salesperson Name (Primary)]
WHEN CHARINDEX( 'Name Not Found', [Salesperson1 Name]) > 0 THEN [Salesperson Name (Primary)]
ELSE [Salesperson1 Name]
END,