这是我的第一个问题,所以如果出现任何故障,我会提前道歉。我找了一个答案,但找不到符合我目前情况的任何东西。我有这个SP显示如下,但问题在于“tmpBusca”表,这可能是一个巨大的数据(在这种情况下,它是大约2000万条记录)。我已经考虑过使用临时表来优化它,但正如你所看到的那样,并没有真正有效的过滤器,因为它可以是id或者根本没有。 提前谢谢。
CREATE PROCEDURE [dbo].[sp_filtraEstoque]
(
@Fornecedor int =null,
@Linha int = null,
@CodEstoquePrincipal int = null,
@CodProduto int = null,
@Nomeproduto varchar(200) = null,
@qtdeEstoque bit = null,
@medida varchar(200) =null
)
AS
BEGIN
SELECT EstoqueProdutoConf.Produto AS Codigo,
EstoqueProdutoConf.Codigo AS Codigo2,
EstoqueProdutoConf.PrecoConf,
Produto.Nome AS ProdutoNome,
Produto.PrecoCusto,
Produto.PrecoVenda,
Produto.Disponibilidade,
Produto.Estoque,
Fornecedor.Nome AS Fornecedor,
Linha.Nome AS Linha,
EstoqueProdutoConf.Acabamento,
EstoqueProdutoConf.Tecido,
EstoqueProdutoConf.Cor,
EstoqueProdutoConf.Configuracao4,
EstoqueProdutoConf.Almoxarifado,
EstoqueProdutoConf.Quantidade,
Produto.Medida,
EstoqueProdutoConf.Disponibilidade AS Expr1,
EstoqueProdutoConf.PrevEntrega,
EstoqueProdutoConf.Oc,
EstoqueProdutoConf.QuantidadeDemonstracao,
EstoqueProdutoConf.CodEstoquePrincipal
FROM EstoqueProdutoConf
INNER JOIN Produto ON EstoqueProdutoConf.Produto = Produto.Codigo
INNER JOIN Fornecedor ON Produto.Fornecedor = Fornecedor.Codigo
INNER JOIN Linha ON Produto.Linha = Linha.Codigo
LEFT OUTER JOIN tmpBusca ON EstoqueProdutoConf.Produto = tmpBusca.Produto
AND EstoqueProdutoConf.Acabamento = tmpBusca.Configuracao1
AND EstoqueProdutoConf.Tecido = tmpBusca.Configuracao2
AND EstoqueProdutoConf.Cor = tmpBusca.Configuracao3
AND EstoqueProdutoConf.Configuracao4 = tmpBusca.Configuracao4
WHERE (Fornecedor.Codigo = @Fornecedor OR @Fornecedor is null)
AND (Produto.Linha = @Linha OR @Linha is null)
AND (EstoqueProdutoConf.CodEstoquePrincipal = @CodEstoquePrincipal OR @CodEstoquePrincipal is null)
AND (CONVERT(varchar(20), tmpBusca.id) = @CodProduto OR @CodProduto is null)
AND (Produto.Nome LIKE '%' + @Nomeproduto + '%' OR @Nomeproduto is null)
AND (@qtdeEstoque is null OR EstoqueProdutoConf.Quantidade<>0)
AND (@medida is null OR produto.Medida like '%' + @medida + '%' )
ORDER BY Fornecedor.nome
END