Como criar uma procedure inteligente, com filtros por todos os campos da tabela, opção de escolher quais colunas devem ser trazidas e como devem ser ordenados os registros.
Flexibidade total, pois funciona facilmente para necessidades distintas como:
- pesquisar um cliente pelo seu ID (chave) e trazer todos seus dados
- relatório de clientes cadastrados, com todos os dados da tabela, ordenando por ID.
- listagem dos clientes, trazendo apenas ID e Nome para abastecer um combobox, por exemplo.
CREATE PROCEDURE [dbo].[STP_CLIENTE_LISTAR]
@ordenacao varchar(100) = null,
@colunas varchar(1000) = null,
@id_cliente int = null ,
@nm_fantasia varchar(30) = null ,
@nr_cnpj_cpf varchar(14) = null
AS
BEGIN
DECLARE @comando varchar(8000)
if @colunas is null
begin
SET @colunas = ' id_cliente ,
nm_cliente ,
nm_fantasia ,
nr_cnpj_cpf '
end
SET @comando =
'
SELECT ' + @colunas + '
FROM TB_CLIENTE
WHERE id_cliente = id_cliente '
--FILTROS
IF @nm_fantasia is not null
BEGIN
IF @nm_fantasia = ''
BEGIN
SET @comando = @comando + ' AND nm_fantasia is null '
END
ELSE
BEGIN
SET @comando = @comando + ' AND nm_fantasia = ''' + @nm_fantasia + ''''
END
END
IF @id_cliente is not null
BEGIN
IF @id_cliente = ''
BEGIN
SET @comando = @comando + ' AND id_cliente is null '
END
ELSE
BEGIN
SET @comando = @comando + ' AND id_cliente = ' + CAST(@id_cliente AS VARCHAR(10))
END
END
IF @nr_cnpj_cpf is not null
BEGIN
IF @nr_cnpj_cpf = ''
BEGIN
SET @comando = @comando + ' AND nr_cnpj_cpf is null '
END
ELSE
BEGIN
SET @comando = @comando + ' AND nr_cnpj_cpf = ''' + @nr_cnpj_cpf + ''''
END
END
---ORDENACAO
IF @ordenacao IS NOT NULL
BEGIN
SET @comando = @comando + ' ORDER BY ' + @ordenacao
END
ELSE
BEGIN
SET @comando = @comando + ' ORDER BY NM_CLIENTE'
END
EXECUTE(@comando)
END
1 comentários:
Linda !
Postar um comentário