none
Criar Procedure para carregar dados RRS feed

  • 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:

    ALUNO

    COD_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


    quinta-feira, 20 de novembro de 2014 01:31

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
    quinta-feira, 20 de novembro de 2014 23:58

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.

    quinta-feira, 20 de novembro de 2014 04:33
  • 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

    quinta-feira, 20 de novembro de 2014 10:30
  • 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
    GO

    MAS ESTA COM ESSA MENSAGEM QUANDO COLOCO ESSES DADOS

    exec P_GeraDadosNota 7.5,3,30,'2013/12/05'
    go

    Mensagem 4917, Nível 16, Estado 0, Procedimento P_GeraDadosNota, Linha 8
    A restrição 'CH_nta1' não existe.

    NÃO CONSEGUI RESOLVER ISSO

    quinta-feira, 20 de novembro de 2014 14:47
  • 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
    GO

    MAS ESTA COM ESSA MENSAGEM QUANDO COLOCO ESSES DADOS

    exec P_GeraDadosNota 7.5,3,30,'2013/12/05'
    go

    Mensagem 4917, Nível 16, Estado 0, Procedimento P_GeraDadosNota, Linha 8
    A restrição 'CH_nta1' não existe.

    NÃO CONSEGUI RESOLVER ISSO

    esta marcando a linha da data
    quinta-feira, 20 de novembro de 2014 16:14
  • 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
    quinta-feira, 20 de novembro de 2014 23:58
  • 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'.

    sexta-feira, 21 de novembro de 2014 03:04
  • Deleted
    domingo, 23 de novembro de 2014 23:10
  • 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

    quarta-feira, 26 de novembro de 2014 14:17