none
Como fazer um insert em duas tabelas distintas RRS feed

  • Pergunta

  •   string strConn =@"INSERT INTO ETAPA_GRUPO_ENSINO (NOME_GRUPO_ENSINO) VALUES (@NOME_GRUPO_ENSINO); 

    INSERT INTO ETAPA_NIVEL_GRUPO_ITENS (ID_ETAPA_NIVEL_ENSINO,ID_ETAPA_GRUPO_ENSINO) VALUES (@ID_ETAPA_NIVEL_ENSINO,@ID_ETAPA_GRUPO_ENSINO);";

    Essa é minha string até o momento. O problema dela é que necessito pegar o ID da tabela etapa_grupo_ensino para preencher a tabela com dois IDs.

    Como posso fazer isso de forma correta?


    Tancredo Almeida

    segunda-feira, 23 de julho de 2012 21:30

Respostas

  • Boa noite Tancredo,

    No Sql Server, existe a função SCOPE_IDENTIY() que retorna o último ID inserido dentro de um escopo.

    Seu comando poderia ser assim:

    string strConn = @"INSERT INTO ETAPA_GRUPO_ENSINO (NOME_GRUPO_ENSINO) VALUES (@NOME_GRUPO_ENSINO);
    DECLARE @LAST_ID AS INT
    SET @LAST_ID = SCOPE_IDENTIY()
    INSERT INTO ETAPA_NIVEL_GRUPO_ITENS (ID_ETAPA_NIVEL_ENSINO,ID_ETAPA_GRUPO_ENSINO) VALUES (
    @LAST_ID,@ID_ETAPA_NIVEL_ENSINO);";

    Att,


    terça-feira, 24 de julho de 2012 00:37

Todas as Respostas

  • Tancredo segue um exemplo onde uso o @@Identity para obter o último código ai basta adaptá-lo a sua necessidade:

    code:

     public static int Inserir(Cidade obj)
            {
                SqlConnection conn = new SqlConnection(UtilDB.ConnectionString);
    
                StringBuilder sql = new StringBuilder();
                sql.Append("INSERT INTO Cidade (NomeCidade, IdUF) ");
                sql.Append("VALUES (@NomeCidade, @IdUf);");
                sql.Append("SELECT @@IDENTITY AS ultimo FROM Cidade");
    
                SqlCommand cmd = new SqlCommand(sql.ToString(), conn);
                cmd.Parameters.AddWithValue("@NomeCidade", obj.NomeCidade);
                cmd.Parameters.AddWithValue("@IdUf", obj.IdUf);
                SqlDataReader rdr = null;
                int ultimoCodigo = -1;
                try
                {
                    conn.Open();
                    rdr = cmd.ExecuteReader();
                    if (rdr.HasRows)
                    {
                        rdr.Read();
                        ultimoCodigo = Convert.ToInt32(rdr["ultimo"]);                    
                    }
                }
                finally {
                    
                    if (rdr != null)
                        rdr.Close();
                    conn.Close(); }
    
                return ultimoCodigo;
            }

    Abraços!


     "Feliz aquele que transfere o saber e aprende o que ensina."(Cora Coralina)


    Pablo Batista Cardoso
    www.pablobatistacardoso.com.br
    pablobatistacardoso@hotmail.com

    segunda-feira, 23 de julho de 2012 22:09
  • Consegui-e resolver de forma muito mais simples, mais muito obrigado por mim ajudar agora e anteriormente vc é um atencioso.

    Veja qual foi a solução somente usando o SQL:

    string strConn = @"INSERT INTO ETAPA_GRUPO_ENSINO (NOME_GRUPO_ENSINO) VALUES (@NOME_GRUPO_ENSINO); INSERT INTO ETAPA_NIVEL_GRUPO_ITENS (ID_ETAPA_NIVEL_ENSINO,ID_ETAPA_GRUPO_ENSINO) VALUES ((SELECT MAX(ID_GRUPO_ENSINO) FROM ETAPA_GRUPO_ENSINO),@ID_ETAPA_NIVEL_ENSINO);";
    

     

    Tancredo Almeida

    segunda-feira, 23 de julho de 2012 22:23
  • Boa noite Tancredo,

    No Sql Server, existe a função SCOPE_IDENTIY() que retorna o último ID inserido dentro de um escopo.

    Seu comando poderia ser assim:

    string strConn = @"INSERT INTO ETAPA_GRUPO_ENSINO (NOME_GRUPO_ENSINO) VALUES (@NOME_GRUPO_ENSINO);
    DECLARE @LAST_ID AS INT
    SET @LAST_ID = SCOPE_IDENTIY()
    INSERT INTO ETAPA_NIVEL_GRUPO_ITENS (ID_ETAPA_NIVEL_ENSINO,ID_ETAPA_GRUPO_ENSINO) VALUES (
    @LAST_ID,@ID_ETAPA_NIVEL_ENSINO);";

    Att,


    terça-feira, 24 de julho de 2012 00:37