3
respostas

O que eu estou fazendo de errado neste exercicio?

Eu executei a resposta do professor e deu certo, porém, eu fiz do meu jeito seguindo a mesma lógica porém dá erro. Me ajudem!

Vejam:

-- Criar o tipo paramentro tabela

create type listdate as table ( data date not null)

-- Declarei o variável com o tipo de paramentro criado.

declare @tabeladata as listdate

-- criei a procedure

create procedure NumerosNotas @tabeladata as listdate readonly as select data, count(*) as Numero from [NOTAS FISCAIS] where data in (select data from @tabeladata) group by data

-- Fiz o insert - ( O ESTRANHO QUE SÓ CONSEGUI FAZER O INSERT EXECUTADO O DECLARE JUNTO declare @tabeladata as listdate insert into @tabeladata (data) values ('20180101'), ('20180102'), ('20180103')

-- Ao executar ocorre erro Mensagem 137, Nível 15, Estado 2, Linha 28 É necessário declarar a variável escalar "@tabeladatas".

exec NumerosNotas @tabeladatas = @tabeladatas

3 respostas

Olá Regielberson, tudo bem? Eu não entendi muito bem os passos que você seguiu, porque primeiro você criou a estrutura do tipo TYPE:

CREATE TYPE listdate as TABLE ( DATA date NOT NULL);

Porém logo em seguida, você declarou a váriável @tabeladata:

DECLARE @tabeladata AS listdate;

Estou correto? E depois você criou a Stored Procedure com o comando:

CREATE PROCEDURE NumerosNotas @tabeladata 
AS listdate READONLY AS 
SELECT DATA, COUNT(*) AS Numero FROM [NOTAS FISCAIS] 
WHERE data IN (SELECT data FROM @tabeladata) 
GROUP BY DATA

Depois você realizou o INSERT usando os comandos:

DECLARE @tabeladata AS listdate

INSERT INTO @tabeladata (data) VALUES ('20180101'),
('20180102'), ('20180103')

E logo em seguida você tentou executar a Stored Procedure:

EXEC NumerosNotas @tabeladatas = @tabeladatas

Foi isso mesmo Regielberson? Bem o que acontece é que a variável @tabeladata só existe e só tem os valores na mesma durante a execução dos comandos, então o que acontece é que precisamos executar de uma vez os três comandos:

DECLARE @tabeladata AS listdate;

INSERT INTO @tabeladata (data) VALUES ('20180101'),
('20180102'), ('20180103');

EXEC NumerosNotasForum @tabeladata = @tabeladata;

Assim, estamos declarando a variável @tabeladata e em seguida inserimos os valores na mesma e por fim já executamos a Stored Procedure que utiliza essa váriavel.

ATENÇÃO: No seu último comando exec NumerosNotas @tabeladatas = @tabeladatas`você colocar o nome da variável @tabeladatas e na verdade é @tabeladata.

Espero ter ajudado!

Boa Tarde,

Exatamente estes passos. Eu fiz a correção do nome da variável, rodei o declare, insert exec.

Só que não tinha entendido que a execução tem que ser do declare, insert e o exec.

Muito obrigado!

Que legal que entendeu e que funcionou Regielberson, sendo assim você poderia marcar esse tópico como solucionado, assim caso alguém tenha a mesma dúvida que você pode encontrar a resposta mais facilmente aqui!