SQL条件查询报错:临时表未全文索引导致CONTAINS无法使用求助
解决临时表上CONTAINS函数报错的问题
嘿,我来帮你搞定这个问题!
错误原因解释
你遇到的报错Cannot use a CONTAINS or FREETEXT predicate on table or indexed view '#MyTEmp' because it is not full-text indexed意思很明确:CONTAINS是SQL Server的全文搜索专用函数,它要求操作的表必须提前创建好全文索引才能使用,而临时表#MyTEmp默认是没有全文索引的,所以直接调用就会触发报错。
而且其实你的需求只是检查PONO列是否包含短横线,完全没必要用需要全文索引的CONTAINS,用普通的字符串匹配函数就足够了。
替代解决方案
这里给你两种简单可行的写法,都不需要依赖全文索引,直接在临时表上就能运行:
方法1:用CHARINDEX函数
CHARINDEX会返回指定字符在字符串中的位置,如果找不到目标字符就返回0,我们可以利用这个特性来判断:
SELECT IIF(CHARINDEX('-', PONO) > 0, 'Dashwala', PONO) AS PONO_Result, Qty FROM #MyTEmp
方法2:用LIKE模糊匹配
这是更直观的字符串匹配方式,%-%表示匹配任意包含短横线的字符串:
SELECT CASE WHEN PONO LIKE '%-%' THEN 'Dashwala' ELSE PONO END AS PONO_Result, Qty FROM #MyTEmp
这两种方法都能完美实现你的需求:当PONO包含短横线时返回'Dashwala',否则返回PONO本身,而且完全不需要给临时表创建任何额外索引。
内容的提问来源于stack exchange,提问作者Heap of Pinto Beans
相关产品推荐
相关产品推荐

