Seja bem vindo,
Nesse post vou falar um pouco sobre uma situação onde eu precisei utilizar uma variável do tipo tabela.
Uma variável do tipo tabela é como uma variável do tipo varchar, int, char entre outros, mas com uma diferença nós criamos o tipo que será uma tabela, são utilizadas para armazenamento temporário de dados.
Problema: Precisei passar uma lista de códigos em string dessa forma '1,2,3' para um parâmetro e criar um filtro para que o meu retorno de registros fosse de acordo com eles.

Solução: Criei um Tipo Tabela e depois declarei uma variável desse mesmo tipo na minha procedure.
Para criar o Tipo Tabela gerar o script de acordo com o seu contexto.
CREATE TYPE dbo.GrupoType AS TABLE ( IDGRUPO INT NOT NULL PRIMARY KEY (IDGRUPO) ) GO
Ele será exibido dentro de Tipos de Tabela Definidos pelo Usuário:
Logo após criei a procedure para fazer a chamada.
Declarei a variável dessa forma: Declare @GrupoPessoa as GrupoType
A seguir faço um While para inserir os valores do parâmetro @ListaGrupo nessa variável do tipo tabela de forma que para cada linha seja adicionado um valor.
E por ultimo faço o filtro usando uma subquery com o select da variável tabela já populada.
CREATE PROCEDURE P_RELATORIO
@LISTAGRUPO as varchar(max)
AS
DECLARE @GRUPOPESSOA GRUPOType
DECLARE @RESULTADOGRUPO VARCHAR(MAX)
---Insere em uma variável do tipo tabela os valores EX: '1,2,3'
-----------------------------------------------
IF LEFT(@LISTAGRUPO, 1)<> ','
BEGIN
SET @LISTAGRUPO = @LISTAGRUPO + ','
END
WHILE charindex(',', @LISTAGRUPO)<> 0
BEGIN
SET @RESULTADOGRUPO = ltrim(rtrim(substring(@LISTAGRUPO , 1 ,
charindex(',', @LISTAGRUPO)- 1)))
SET @LISTAGRUPO = ltrim(rtrim(right(@LISTAGRUPO ,
len(@LISTAGRUPO )- charindex(',', @LISTAGRUPO))))
INSERT INTO @GRUPOPESSOA(IDGRUPO) VALUES (@RESULTADOGRUPO )
END
-----------------------------------------------------
--a variável @GRUPOPESSOA foi populada com os valores 1,2,3
SELECT pes_CPF AS CPF,
pes_Nome AS NOME,
pes_CodigoGrupo AS CODGRUPO
FROM PessoaFisica
WHERE (pes_CodigoGrupo IN (SELECT IDGRUPO FROM @GRUPOPESSOA) OR @LISTAGRUPO IS NULL)
Resultado:
Notas:
Aprendi fazer dessa forma, mas descobri que existem outras formas também.
Não consegui utilizar na versão SQL Server 9.0.4053, então atualizei para a versão SQL Server 10.50.2500.



Nenhum comentário:
Postar um comentário