我正在制作一个 ASP.NET 网站,用户可以同时选择 20 多个不同的过滤器。诸如“产品类型”、“年份”、“使用状态”、“颜色”、“尺寸”等。
其中许多项目与其他表相关。因此,我的查询使用 WHERE 和“INNER JOIN”对其他 12 个表进行了“SELECT”。
问题在于可以存在或不存在的参数。 我的意思是,根据用户的选择,某些参数可能为 NULL 或不为 NULL,我不能在我的查询中使用它们(比如使用 ISNULL()),因为我害怕返回由此导致的错误结果。
所以,我的解决方案是根据收到的参数构建查询字符串,我的意思是,查询将只考虑那些具有实际值的参数。
declare @SEARCH_QUERY nvarchar(max);
set @SEARCH_QUERY = 'select AcervoID, Categoria, Fabricante, Personagem, Estado,
IIF(LEN(Description) > 120, LEFT(Description,120) + ''...'', Description) [mDescription],
Value, Availability, ActiveLink, Title,
RIGHT([thumb], CHARINDEX(''\'', REVERSE([thumb])) -1) [Image],
E.UsoID, E.FontAwesome
from Acervo A
inner join Categorias C on C.CatID = A.Categoria
inner join Fabricantes F on F.FabID = A.Fabricante
inner join Personagem P on P.PersID = A.Personagem
inner join EstadoUso E on E.UsoID = A.Estado
where A.Ativo = ''true'' and A.Disponiveis > 0'
if @m_Cat >-1
set @SEARCH_QUERY = @SEARCH_QUERY + ' and A.Categoria = ' + convert(nvarchar(4),@m_Cat)
if @m_Fab >-1
set @SEARCH_QUERY = @SEARCH_QUERY + ' and A.fabricante = ' + convert(nvarchar(4),@m_Fab)
if @m_Pers > -1
set @SEARCH_QUERY = @SEARCH_QUERY + ' and A.Personagem = ' + convert(nvarchar(4),@m_Pers)
if @m_EU is not null
set @SEARCH_QUERY = @SEARCH_QUERY + @m_EU
exec sp_executeSQL @SEARCH_QUERY
有最好的方法吗?
提前致谢。