Usuário com melhor resposta
Criar Procedure para carregar dados

Pergunta
-
BOA NOITE GALERA,
ESTOU FAZENDO UM BD_ESCOLA, E PRECISO DA AJUDA DE VCS PARA CARREGAR ALGUNS DADOS EM UMA TABELA.
MINHA INTENÇÃO É CRIAR UMA PROCEDURE QUE INCLUA DADOS NA TABELA NOTA PARA 180 ALUNOS, SENDO QUE OS ALUNOS DE NÍVEL BASICO TENHAM 1 NOTA, DE NÍVEL INTERMEDIÁRIO TENHAM 2 E DE AVANÇADO 3.
ALEM DESSAS DUAS TABELAS (LOGO ABAIXO), EXISTE UMA TERCEIRA TABELA QUE DARÁ UMA CONDIÇÃO PARA A PROCEDURE, A TABELA CURSO, QUE ESTÁ RELACIONADA COM A TABELA ALUNO ATRAVES DO COD_CURSO. ESSE COD_CURSO DEFINE O NÍVEL DE CURSO QUE O ALUNO ESTÁ.
EXISTE UMA CONDIÇÃO PARA ESSE ALUNO SER BASICO, INTERMEDIARIO E AVANÇADO(ISSO JÁ ESTA DEFINIDO NA TABELA ALUNO).
[TABELA CURSO]
COD_CURSO = 3 NÍVEL BASICO
COD_CURSO=4 NIVEL INTERMEDIÁRIO
COD_CURSO=5 NIVEL AVANÇADO.
[TABELA ALUNO]
BASICO DT_CAD BETWEEN '2013/06/01' AND '2013/12/31'
INTERMEDIARIO DT_CAD BETWEEN '2012/07/01' AND '2013/05/31'
AVANCADO DT_CAD BETWEEN '2012/01/01' AND '2012/06/30'
PARA INSERIR A DT_LANC DA TABELA NOTA, SERIA NECESSÁRIO USAR COMO PARÂMETRO AS DATAS DO CADASTRO DE CADA ALUNO
TABELAS:
ALUNOCOD_ALUNO INT IDENTITY
COD_CURSO INT
NOME_ALUNO VARCHAR(40)
DT_CAD DATE
NOTA
COD_NOTA INT IDENTITY
COD_ALUNO INT
VL_NOTA DECIMAL (3,1)
DT_LANC DATE
ESSE POST FICOU ENORME, ESPERO QUE EU TENHA ME EXPRESSADO BEM, DESDE JÁ AGRADEÇO GALERA
VALEU
Respostas
-
Boa noite Junior,
O campo CH_nta1 existe na tabela?
Eu acho que o erro está acontecendo porque você está tentando desabilitar a chave, porém o campo não existe na tabela.
Abs.
Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx
- Marcado como Resposta JuniorOSL quarta-feira, 3 de dezembro de 2014 17:36
Todas as Respostas
-
Junior, bom dia.
Ficaram algumas dúvidas com relação ao relacionamento das tabelas mas espero que consiga ajudar com o entendimento que fiz. Segue abaixo o código para inserção de nota:
CREATE PROCEDURE USPI_NOTA
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO NOTA(COD_ALUNO, VL_NOTA, DT_LANC)
SELECT
COD_ALUNO,
CASE
WHEN DT_CAD BETWEEN '2013/06/01' AND '2013/12/31' THEN 3
WHEN DT_CAD BETWEEN '2012/07/01' AND '2013/05/31' THEN 4
WHEN DT_CAD BETWEEN '2012/01/01' AND '2012/06/30' THEN 5
END,
DT_CAD
FROM
ALUNO
END
GO
Abraço.
-
BOM DIA SANDRO,
TENTEI RODAR O SEU CÓDIGO MAS NÃO DEU CERTO, ACABOU RODANDO MAS NÃO INCLUIU NENHUM DADO NA TABELA NOTA. NA VERDADE EU QUERO COMO QUE UMA INSTRUÇÃO WHILE QUE ENQUANDO COD_ALUNO <=180 FAÇA UM INSERT DESSES DADOS, E DENTRO DESSA CONDIÇÃO COLOCAR UM CASE IGUAL VC FEZ PARA O COD_CURSO DO ALUNO, BOM EU ACHO QUE É ASSIM QUE VAI FUNCIONAR
-
CONSEGUI FAZER ASSIM,
CREATE PROCEDURE P_GeraDadosNota
@Val_Nota decimal(3,1), --nota
@Cod_curso1 int, --curso
@qtd_pres int, --presençca
@dt_lancNota smalldatetime --data lançamento da nota
AS
ALTER TABLE nota
NOCHECK CONSTRAINT CH_nta1
DECLARE @Cod_aluno int
DECLARE Cursor_aluno CURSOR
FOR SELECT Cod_curso FROM aluno
WHERE Cod_curso = @Cod_curso1
OPEN Cursor_aluno
FETCH NEXT FROM Cursor_aluno INTO @Cod_aluno
WHILE (@@Fetch_Status = 0)
BEGIN
SET DATEFORMAT ymd
SET @dt_lancNota = Convert(smalldatetime,@dt_lancNota)
INSERT nota(COD_ALUNO,VL_NOTA,QTD_PRES,DT_LANC)
VALUES(@Cod_aluno,@Val_Nota,@qtd_pres,@dt_lancNota)
FETCH NEXT FROM Cursor_aluno INTO @Cod_aluno
END
DEALLOCATE Cursor_aluno
ALTER TABLE nota
NOCHECK CONSTRAINT CH_nta1
GOMAS ESTA COM ESSA MENSAGEM QUANDO COLOCO ESSES DADOS
exec P_GeraDadosNota 7.5,3,30,'2013/12/05'
goMensagem 4917, Nível 16, Estado 0, Procedimento P_GeraDadosNota, Linha 8
A restrição 'CH_nta1' não existe.NÃO CONSEGUI RESOLVER ISSO
-
CONSEGUI FAZER ASSIM,
CREATE PROCEDURE P_GeraDadosNota
@Val_Nota decimal(3,1), --nota
@Cod_curso1 int, --curso
@qtd_pres int, --presençca
@dt_lancNota smalldatetime --data lançamento da nota
AS
ALTER TABLE nota
NOCHECK CONSTRAINT CH_nta1
DECLARE @Cod_aluno int
DECLARE Cursor_aluno CURSOR
FOR SELECT Cod_curso FROM aluno
WHERE Cod_curso = @Cod_curso1
OPEN Cursor_aluno
FETCH NEXT FROM Cursor_aluno INTO @Cod_aluno
WHILE (@@Fetch_Status = 0)
BEGIN
SET DATEFORMAT ymd
SET @dt_lancNota = Convert(smalldatetime,@dt_lancNota)
INSERT nota(COD_ALUNO,VL_NOTA,QTD_PRES,DT_LANC)
VALUES(@Cod_aluno,@Val_Nota,@qtd_pres,@dt_lancNota)
FETCH NEXT FROM Cursor_aluno INTO @Cod_aluno
END
DEALLOCATE Cursor_aluno
ALTER TABLE nota
NOCHECK CONSTRAINT CH_nta1
GOMAS ESTA COM ESSA MENSAGEM QUANDO COLOCO ESSES DADOS
exec P_GeraDadosNota 7.5,3,30,'2013/12/05'
goMensagem 4917, Nível 16, Estado 0, Procedimento P_GeraDadosNota, Linha 8
A restrição 'CH_nta1' não existe.NÃO CONSEGUI RESOLVER ISSO
-
Boa noite Junior,
O campo CH_nta1 existe na tabela?
Eu acho que o erro está acontecendo porque você está tentando desabilitar a chave, porém o campo não existe na tabela.
Abs.
Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx
- Marcado como Resposta JuniorOSL quarta-feira, 3 de dezembro de 2014 17:36
-
Boa noite Bruno,
é verdade eu ainda não tinha feito a constraint na tabela nota, fiz a correção e agora está apresentando esse erro quando executo a procedure, o que será que pode estar errado??
A instrução INSERT conflitou com a restrição do FOREIGN KEY "FK_ALUNO1". O conflito ocorreu no bando de dados "MUSICALIZANDO", tabela "dbo.ALUNO", column 'COD_ALUNO'.
-
Deleted
- Sugerido como Resposta Durval RamosModerator quarta-feira, 26 de novembro de 2014 15:36
-
Junior,
Alguns detalhes são importantes:
- Sua Stored Procedure esta fazendo uso do Alter Table dentro da Procedure, talvez este procedimento não seja necessário ser executado sempre que a Stored Procedure for utilizada;
- Tome cuidado em utilizar Cursor, este um recurso fantástico do SQL Server, mas que requer um custo de processamento e poderá em alguns casos sobrecarregar o uso do seu SQL Server.
- Esta constraint que você esta utilizando, com base, na mensagem de erro ela não existe no seu ambiente.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Sugerido como Resposta Durval RamosModerator quarta-feira, 26 de novembro de 2014 15:36