【发布时间】:2014-03-24 21:12:37
【问题描述】:
我们有一个存储过程,它接受一些参数,但这些参数中只有一个有值,用于过滤结果集。 SELECT 语句本身包含多个连接并且有点长。
为了避免多次复制粘贴查询,我希望能够在WHERE 子句中使用IF 或CASE 语句。问题是,我们使用的是全文索引和CONTAINS 语句,我不太确定如何在CONTAINS 子句内部/外部注入IF 或CASE 语句,如下所示:
SELECT * FROM [QUERY]
WHERE(
IF @Filter1 IS NOT NULL
BEGIN
CONTAINS(SomeColumn, @Filter1)
END
ELSE IF @Filter2 IS NOT NULL
BEGIN
CONTAINS(AnotherColumn, @Filter2)
END)
这显然行不通。我不能将SELECT 查询放在视图或函数中,因为结果集当前没有指定唯一索引键,即不能被全文索引(现在表是单独的全文索引来解决这个问题问题)。
那么有没有办法做到这一点?我可能会将长 SELECT 查询复制到每个过滤器的不同 IF 语句中,但这会变得非常难看。任何帮助表示赞赏。
【问题讨论】:
标签: sql sql-server full-text-search full-text-indexing