您可以与多个contains
写为一个单一的where
:
select Rowid, @counter
from Patients
where (@ColumnnName = 'firstname' and Contains(firstname, SUBSTRING(@parameterFromUser, 1, @counter))) or
(@ColumnnName = 'middlename' and Contains(middlename, SUBSTRING(@parameterFromUser, 1, @counter))) or
(@ColumnnName = 'lastname' and Contains(lastname, SUBSTRING(@parameterFromUser, 1, @counter)));
作为一个说明:我不知道这将如何优化。
我可能会建议一个子查询方法:
select *
from (select Rowid, @counter
from Patients
where Contains((firstname, middlename, lastname), SUBSTRING(@parameterFromUser, 1, @counter))
)
where @ColumnName = 'firstname' and firstname like '%' + @parameterFromUser + '%' or
@ColumnName = 'middlename' and middlename like '%' + @parameterFromUser + '%' or
. . .
这是不完全匹配。它假定将大大减少正在搜索的行数。但是,它具有一定的优势,例如,如果需要,可以轻松地在多列中进行搜索。
好的,但case语句只给出一个列名。这个语句在用户定义的函数中,我的列名在一个变量中,我不能直接在where子句中使用变量。那么,我可以在CONTAINS里面的column_name中使用这个变量吗? – Simran 2015-02-05 15:05:26
不,你不能 – 2015-02-05 15:07:14
这里有大约10-15列,我直接插入到表中。插入到table_name中选择x,y,z/*查询的其余部分*/ – Simran 2015-02-05 15:08:09