Usando um String com varios valores para consulta
Boa Tarde Pessoal,
Estou fazendo uma query onde no DECLARE preciso colocar varias informações na mesma string e quando for na consulta como faço para usar o Like se for este o comando correto para o tipo de consulta que estamos precisando realizar?
DECLARE @cCpoFilial VARCHAR(2)
DECLARE @cCpoPedido VARCHAR(6)
DECLARE @cCpoNFOrigem VARCHAR(50)
DECLARE @cCpoFornecedor VARCHAR(6)
SET @cCpoFilial =''''51''''
SET @cCpoPedido =''''978289''''
SET @cCpoFornecedor =''''000055''''
SET @cCpoNFOrigem =(''''000632880'''',''''000641250'''',''''000636869'''')
-- CABEÇALHO DO PEDIDO DE VENDAS
SELECT C5_NOTA,C5_CLIENTE,C5_LOJACLI,* FROM SC5010(NOLOCK)
WHERE D_E_L_E_T_=''''''''
AND C5_FILIAL=@cCpoFilial
AND C5_NUM=@cCpoPedido
AND C5_NOTA LIKE @cCpoNFOrigem
Observação: No campo nota da variavel preciso colocar Varias notas fiscais.
Estou fazendo uma query onde no DECLARE preciso colocar varias informações na mesma string e quando for na consulta como faço para usar o Like se for este o comando correto para o tipo de consulta que estamos precisando realizar?
DECLARE @cCpoFilial VARCHAR(2)
DECLARE @cCpoPedido VARCHAR(6)
DECLARE @cCpoNFOrigem VARCHAR(50)
DECLARE @cCpoFornecedor VARCHAR(6)
SET @cCpoFilial =''''51''''
SET @cCpoPedido =''''978289''''
SET @cCpoFornecedor =''''000055''''
SET @cCpoNFOrigem =(''''000632880'''',''''000641250'''',''''000636869'''')
-- CABEÇALHO DO PEDIDO DE VENDAS
SELECT C5_NOTA,C5_CLIENTE,C5_LOJACLI,* FROM SC5010(NOLOCK)
WHERE D_E_L_E_T_=''''''''
AND C5_FILIAL=@cCpoFilial
AND C5_NUM=@cCpoPedido
AND C5_NOTA LIKE @cCpoNFOrigem
Observação: No campo nota da variavel preciso colocar Varias notas fiscais.
Wanderson Fernandes
Curtidas 0
Respostas
Frank Hosaka
22/02/2023
Eu não colocaria as notas no campo de busca.
Faria assim:
Select * from sc5010 where filial=@filial and pedido=@pedido;
Mas se você quer listar apenas os pedidos que foram faturados, aí sim o campo da nf é importante e mudaria a consulta assim:
Select * from sc5010 where filial=@filial and pedido=@pedido and notafiscal;
Ou seja, iria usar o campo notafiscal só para filtrar os pedidos que foram faturados (não importa quantas notas existem lá dentro, mas o pedido que não tiver nenhuma nota, não será selecionado).
Faria assim:
Select * from sc5010 where filial=@filial and pedido=@pedido;
Mas se você quer listar apenas os pedidos que foram faturados, aí sim o campo da nf é importante e mudaria a consulta assim:
Select * from sc5010 where filial=@filial and pedido=@pedido and notafiscal;
Ou seja, iria usar o campo notafiscal só para filtrar os pedidos que foram faturados (não importa quantas notas existem lá dentro, mas o pedido que não tiver nenhuma nota, não será selecionado).
GOSTEI 0
Claudio Andrade
22/02/2023
Boa Tarde Pessoal,
Estou fazendo uma query onde no DECLARE preciso colocar varias informações na mesma string e quando for na consulta como faço para usar o Like se for este o comando correto para o tipo de consulta que estamos precisando realizar?
DECLARE @cCpoFilial VARCHAR(2)
DECLARE @cCpoPedido VARCHAR(6)
DECLARE @cCpoNFOrigem VARCHAR(50)
DECLARE @cCpoFornecedor VARCHAR(6)
SET @cCpoFilial =''''51''''
SET @cCpoPedido =''''978289''''
SET @cCpoFornecedor =''''000055''''
SET @cCpoNFOrigem =(''''000632880'''',''''000641250'''',''''000636869'''')
-- CABEÇALHO DO PEDIDO DE VENDAS
SELECT C5_NOTA,C5_CLIENTE,C5_LOJACLI,* FROM SC5010(NOLOCK)
WHERE D_E_L_E_T_=''''''''
AND C5_FILIAL=@cCpoFilial
AND C5_NUM=@cCpoPedido
AND C5_NOTA LIKE @cCpoNFOrigem
Observação: No campo nota da variavel preciso colocar Varias notas fiscais.
Estou fazendo uma query onde no DECLARE preciso colocar varias informações na mesma string e quando for na consulta como faço para usar o Like se for este o comando correto para o tipo de consulta que estamos precisando realizar?
DECLARE @cCpoFilial VARCHAR(2)
DECLARE @cCpoPedido VARCHAR(6)
DECLARE @cCpoNFOrigem VARCHAR(50)
DECLARE @cCpoFornecedor VARCHAR(6)
SET @cCpoFilial =''''51''''
SET @cCpoPedido =''''978289''''
SET @cCpoFornecedor =''''000055''''
SET @cCpoNFOrigem =(''''000632880'''',''''000641250'''',''''000636869'''')
-- CABEÇALHO DO PEDIDO DE VENDAS
SELECT C5_NOTA,C5_CLIENTE,C5_LOJACLI,* FROM SC5010(NOLOCK)
WHERE D_E_L_E_T_=''''''''
AND C5_FILIAL=@cCpoFilial
AND C5_NUM=@cCpoPedido
AND C5_NOTA LIKE @cCpoNFOrigem
Observação: No campo nota da variavel preciso colocar Varias notas fiscais.
Altere o LIKE por IN
Talvez precise algum ajustes para atender seu uso *
DECLARE @cCpoFilial VARCHAR(2) DECLARE @cCpoPedido VARCHAR(6) DECLARE @cCpoNFOrigem VARCHAR(50) DECLARE @cCpoFornecedor VARCHAR(6) SET @cCpoFilial ='51' SET @cCpoPedido ='978289' SET @cCpoFornecedor ='000055' SET @cCpoNFOrigem =('000632880','000641250','000636869') -- CABEÇALHO DO PEDIDO DE VENDAS SELECT C5_NOTA,C5_CLIENTE,C5_LOJACLI,* FROM SC5010(NOLOCK) WHERE D_E_L_E_T_='' AND C5_FILIAL=@cCpoFilial AND C5_NUM=@cCpoPedido AND C5_NOTA IN @cCpoNFOrigem -- ou usar assim AND C5_NOTA IN ('000632880','000641250','000636869')
GOSTEI 0
Arthur Heinrich
22/02/2023
A maioria dos bancos não trabalha com filtros dinâmicos, como esse.
Você pode montar a query dinamicamente, concatenando as partes como o exemplo do Claudio e, depois, executar a query dinamicamente, usando sp_executesql.
Também dá para fazer uma gambiarra, mas ela não serve para utilizar o índice. Então, não é uma boa ideia. Na realidade é uma péssima ideia, mas vale o exemplo para compartilhar conhecimento.
No final será o mesmo que:
AND ',000632880,000641250,000636869,' like '%,000641250,%'
Você pode montar a query dinamicamente, concatenando as partes como o exemplo do Claudio e, depois, executar a query dinamicamente, usando sp_executesql.
Também dá para fazer uma gambiarra, mas ela não serve para utilizar o índice. Então, não é uma boa ideia. Na realidade é uma péssima ideia, mas vale o exemplo para compartilhar conhecimento.
DECLARE @cCpoFilial VARCHAR(2) DECLARE @cCpoPedido VARCHAR(6) DECLARE @cCpoNFOrigem VARCHAR(50) DECLARE @cCpoFornecedor VARCHAR(6) SET @cCpoFilial ='51' SET @cCpoPedido ='978289' SET @cCpoFornecedor ='000055' SET @cCpoNFOrigem ='000632880,000641250,000636869' -- CABEÇALHO DO PEDIDO DE VENDAS SELECT C5_NOTA,C5_CLIENTE,C5_LOJACLI,* FROM SC5010(NOLOCK) WHERE D_E_L_E_T_='' AND C5_FILIAL=@cCpoFilial AND C5_NUM=@cCpoPedido AND C5_NOTA IN @cCpoNFOrigem -- ou usar assim AND ','+@cCpoNFOrigem+',' like '%,'+C5_NOTA+',%'
No final será o mesmo que:
AND ',000632880,000641250,000636869,' like '%,000641250,%'
GOSTEI 0