PROBLEMA COM SQL INSERT WHERE NOT EXISTS

 Tópico anterior Próximo tópico Novo tópico

PROBLEMA COM SQL INSERT WHERE NOT EXISTS

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#475181 - 13/07/2017 16:34:55

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


Boa tarde, tenho uma consulta SQL, Banco de dados MySql, que se houver registros na tabela, ela funciona normalmente, mas se a tabela estiver vazia, no insere os dados. Segue a rotina abaixo:

  Using cmd As New MySqlCommand
                    cmd.Connection = con
                    Dim a
                    For a = 0 To Lst.Count - 1
                        sSql = []INSERT INTO Turmas(Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs) SELECT [] _
                            & []@Matricula, @Classe, @Ano, @Semestre, @Inicio, @Fim, @RA, @Ativo, @Obs FROM Turmas [] _
                            & []WHERE NOT EXISTS (SELECT Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs FROM Turmas WHERE Matricula = @Matricula AND Classe =@Classe) LIMIT 1;[]
                        cmd.Parameters.AddWithValue([]@Matricula[], Lst.Item(a).Matricula)
                        cmd.Parameters.AddWithValue([]@Classe[], Lst.Item(a).Classe)
                        cmd.Parameters.AddWithValue([]@Ano[], Lst.Item(a).Ano)
                        cmd.Parameters.AddWithValue([]@Semestre[], Lst.Item(a).Semestre)
                        cmd.Parameters.AddWithValue([]@Inicio[], Lst.Item(a).Inicio)
                        cmd.Parameters.AddWithValue([]@Fim[], Lst.Item(a).Fim)
                        cmd.Parameters.AddWithValue([]@RA[], Lst.Item(a).RA)
                        cmd.Parameters.AddWithValue([]@Ativo[], Lst.Item(a).Ativo)
                        cmd.Parameters.AddWithValue([]@Obs[], Lst.Item(a).Obs)
                        cmd.CommandText = sSql
                        cmd.ExecuteNonQuery()
                        cmd.Parameters.Clear()
                    Next
                End Using


Gostaria de saber se erro meu em montar a consulta SQL ou necessrio haver registros para funcionar.
Obrigado

O conhecimento como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#475184 - 13/07/2017 16:43:48

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


DAMASCENO.CESAR,

Faz um count e verifique se existem registros na tabela.
  

sSql = []INSERT INTO Turmas(Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs) SELECT [] _
                            & []@Matricula, @Classe, @Ano, @Semestre, @Inicio, @Fim, @RA, @Ativo, @Obs FROM Turmas [] _
                            & []WHERE  (SELECT count(*)  FROM Turmas WHERE Matricula = @Matricula AND Classe =@Classe) <= 0;[]





#475185 - 13/07/2017 16:53:07

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


GUIMORAES, no funcionou, mas obrigado. Estou encerrando o expediente agora, amanh retorno.

O conhecimento como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#475195 - 14/07/2017 09:44:26

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


GUIMORAES, baseado em seu exemplo tambm tentei:
  sSql = []INSERT INTO Turmas(Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs) SELECT [] _
                            & []@Matricula, @Classe, @Ano, @Semestre, @Inicio, @Fim, @RA, @Ativo, @Obs FROM Turmas [] _
                            & []WHERE (SELECT COUNT(Matricula) AS Matricula FROM Turmas where Matricula <=0) OR NOT EXISTS [] _
                            & [](SELECT Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs FROM Turmas WHERE Matricula = @Matricula AND Classe =@Classe) [] _
                            & [] LIMIT 1;[]


e a variao:
  sSql = []INSERT INTO Turmas(Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs) SELECT [] _
                            & []@Matricula, @Classe, @Ano, @Semestre, @Inicio, @Fim, @RA, @Ativo, @Obs FROM Turmas [] _
                            & []WHERE NOT EXISTS (SELECT Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs FROM Turmas WHERE Matricula = @Matricula AND Classe =@Classe) [] _
                            & []OR (SELECT COUNT(Matricula) AS Matricula FROM Turmas where Matricula <=0) LIMIT 1;[]


e nenhuma funcionou, se alguem tiver mais ideias...

O conhecimento como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#475205 - 14/07/2017 13:26:03

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


DAMASCENO.CESAR

Voc no precisa utilizar o Limit nesta operao, pois o count s ir retornar um registros.
Fiz um teste em meu banco de dados, e obtive sucesso. Voc est recebendo alguma mensagem de erro?

Tenta desta forma para ver se d certo!
  

sSql = []INSERT INTO Turmas(Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs) []
sSql = sSql & [] SELECT Matricula, Classe, Ano, Semestre, Inicio, Fim, RA, Ativo, Obs FROM Turmas[]
sSql = sSql & [] WHERE (SELECT COUNT(Matricula) AS Matricula FROM Turmas[]
sSql = sSql & [] WHERE @Matricula, @Classe, @Ano, @Semestre, @Inicio, @Fim, @RA, @Ativo, @Obs) <=0[]

cmd.Parameters.AddWithValue([]@Matricula[], Lst.Item(a).Matricula)
cmd.Parameters.AddWithValue([]@Classe[], Lst.Item(a).Classe)
cmd.Parameters.AddWithValue([]@Ano[], Lst.Item(a).Ano)
cmd.Parameters.AddWithValue([]@Semestre[], Lst.Item(a).Semestre)
cmd.Parameters.AddWithValue([]@Inicio[], Lst.Item(a).Inicio)
cmd.Parameters.AddWithValue([]@Fim[], Lst.Item(a).Fim)
cmd.Parameters.AddWithValue([]@RA[], Lst.Item(a).RA)
cmd.Parameters.AddWithValue([]@Ativo[], Lst.Item(a).Ativo)
cmd.Parameters.AddWithValue([]@Obs[], Lst.Item(a).Obs)
cmd.CommandText = sSql
cmd.ExecuteNonQuery()
cmd.Parameters.Clear()



A segunda opo seria fazer um select isolado e depois disto fazer o insert.



#475276 - 18/07/2017 23:10:53

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


s dando um Up!


O conhecimento como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#475277 - 18/07/2017 23:14:38

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
https://dev.mysql.com/doc/refman/5.7/en/replace.html

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por DAMASCENO.CESAR em 14/12/2017 09:03:47