Guest --Marina -- Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 Pessoal, me ajudem!!!!Preciso saber se existe alguma estrutura em sql que atualize vários registros ao mesmo tempo, neste exemplo aqui eu consigo fazer com que ele altere um dado por vez, mas se tivesse um jeito de alterar todos ao mesmo tempo seria de grande ajuda!update conv_eventosset Site_ev=35 where Site_ev=45ou seja, eu preciso alterar mais numeros alem deste para outros e executando esta instrução em um registro de cada vez demora muito!Não consegui usar o AND porque não são campos diferentes e sim registros diferentes no mesmo campovaleuuuMarina Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 .Andreia. Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 use o IN, exemplo:update TABELA set nome = 'teste' where id in (1,2,3,4,5,6,7,8,9,10) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 18, 2007 Denunciar Share Postado Outubro 18, 2007 Não consegui usar o AND porque não são campos diferentes e sim registros diferentes no mesmo campotb não era pra usar AND e sim OR.mas faz o q a andreia falou q deve resolver. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest BurnOS Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 Estou com um problema parecido, tenho uma tabela com atualizações e preciso sobrepor os dados em outra tabela. Preciso fazer essa atualização somente onde, por exemplo, o campo de crm for igual, então tentei:INSERT INTO cadastromedicoSELECT * FROM alteracaoWHERE cadastromedico.crm_medico = alteracao.crm_medicoDá esse erro:Server: Msg 107, Level 16, State 3, Line 1The column prefix 'cadastromedico' does not match with a table name or alias name used in the query.Alguém me dá um help?Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 (editado) tenta assim:INSERT INTO cadastromedico(SELECT alteracao.* FROM alteracao INNER JOIN cadastromedico ON cadastromedico.crm_medico = alteracao.crm_medico)[/code]mas alias, isso não vai fazer os dados serem atualizados, mas vai inserir novos dados.pra atualizar tem q ser com update mesmo. ou faz com o insert assim e apaga os registros antigos. Editado Outubro 29, 2007 por kuroi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BurnOS Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 Então Kuroi, eu preciso que atualize, pois na tabela de atualização, tem campos que não tem dados, e na tabela de cadastro, esses campos já possuem dados, por isso não posso adicionar / excluir...Como faço isso com o update?Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 então, pra update acho q você teria q por campo por campo na query, não sei se existe alguma forma de fazer mas simplificada como é o caso desse insert. eu faria assim ó:Update cadastromedicoINNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medicoSet cadastromedico.campo1 = alteracao.campo1,cadastromedico.campo2 = alteracao.campo2,cadastromedico.campo3 = alteracao.campo3,....cadastromedico.campon = alteracao.campon[/code] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BurnOS Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 beleza kuroi... testei as duas formas, na primeira, tirei os parênteses, o código ainda não funciona, pelo parse, ele até tá certo, mas não roda, dáo erro abaixo...Server: Msg 8101, Level 16, State 1, Line 1An explicit value for the identity column in table 'cadastromedico' can only be specified when a column list is used and IDENTITY_INSERT is ON.No update, ele não roda... fica acusando esse erro:Server: Msg 156, Level 15, State 1, Line 2Incorrect syntax near the keyword 'INNER'.Tentei fazer assim também:Update cadastromedicoSet cadastromedico.territorio = alteracao.territorio Fica dando esse erro:Server: Msg 107, Level 16, State 3, Line 1The column prefix 'alteracao' does not match with a table name or alias name used in the query.Esse erro acontece direto e pelo que entendi, seria o nome da tabela que estaria errado, mas está tudo certo...Vlew Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 opa, foi mal, a sintaxe q eu te passei era pra funcionar no access. olhei aqui e vi q no sql tem q ser assim ó:Update cadastromedicoSet cadastromedico.campo1 = alteracao.campo1,cadastromedico.campo2 = alteracao.campo2From cadastromedico INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medico[/code] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BurnOS Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 Kuroi, vlew mesmo. Funfou beleza. Colocando campo por campo... eu até tentei deixar assim:Update cadastromedicoSet cadastromedico.* = alteracao.*From cadastromedico INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medico Mas não rolou...Agora mais uma coisa... na hora que ele atualiza, ele tá fazendo exatamente o que eu não queria, ele apaga algo que já existia se na tabela de alteração o campo estiver em branco... :(Por ora, o que me ocorre, é colocar no update, só o campo que for atualizar mesmo.Tem como colocar uma condição?Abraços e vlew mesmo!!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 Update cadastromedicoSet cadastromedico.* = alteracao.*From cadastromedico INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medicohaha tb tentei isso... mas se você descobri algum jeito, posta ai.Agora mais uma coisa... na hora que ele atualiza, ele tá fazendo exatamente o que eu não queria, ele apaga algo que já existia se na tabela de alteração o campo estiver em branco... :(Por ora, o que me ocorre, é colocar no update, só o campo que for atualizar mesmo.Tem como colocar uma condição?tem sim, você teria q por uma condicao pra cada campo. faz uma busca ai no forum sobre o comando case q tem alguns topicos ai q explicam como faz e tem exemplos. mas se você tiver duvidas pra usar o case, pergunta ae. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BurnOS Postado Outubro 29, 2007 Denunciar Share Postado Outubro 29, 2007 hauihaieu até tou tentando umas maluquices aqui...Update cadastromedicoSet [dbo].[cadastromedico].[*] = [dbo].[alteracao].[*]From cadastromedico INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medicoele dá esse erro... vê se dá alguma luz... :PServer: Msg 1032, Level 15, State 1, Line 2Cannot use the column prefix 'dbo.cadastromedico'. This must match the object in the UPDATE clause 'cadastromedico'.Se eu descobrir posto com certeza!! heheAbraços e vlew mais uma vez!!! Vou procurar o CASE... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 30, 2007 Denunciar Share Postado Outubro 30, 2007 Server: Msg 1032, Level 15, State 1, Line 2Cannot use the column prefix 'dbo.cadastromedico'. This must match the object in the UPDATE clause 'cadastromedico'.opa então. é porque você poe uma tabela no update e depois tenta pegar o campo de uma outra tabela no set. alias, é a mesma tabela, mas como você escreve de modo diferente o sql entende q a tabela do update não é a mesma q você usa no set e tem q ser (no Update você pos cadastromedico e no Set você pos [dbo].[cadastromedico]).é, na verdade não sei se é possivel fazer um update desse jeito, mas se eu descobrir qualquer coisa eu aviso.se tiver duvidas sobre o case, pode perguntar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BurnOS Postado Outubro 30, 2007 Denunciar Share Postado Outubro 30, 2007 Eaew Kuroi...estou mexendo nesse UPDATE ainda... e estou perdido nesse CASE... eu estou pensando na lógica, tem de ser assim, se no tabela de alteração for null e na tabela de cadastro não, mantém o registro atual ou o da tabela de cadastro. Certo?!por ora está assim:Update cadastromedicoSet cadastromedico.territorio = alteracao.territorio , cadastromedico.crm_medico = alteracao.crm_medico ,cadastromedico.data_inclusao = alteracao.data_inclusao , cadastromedico.especialidade = alteracao.especialidade ,cadastromedico.nome = alteracao.nome , cadastromedico.endereco = alteracao.endereco ,cadastromedico.propagandista = alteracao.propagandista , cadastromedico.complemento = alteracao.complemento ,cadastromedico.bairro = alteracao.bairro , cadastromedico.cidade = alteracao.cidade ,cadastromedico.cep = alteracao.cep , cadastromedico.uf = alteracao.uf ,cadastromedico.telcom = alteracao.telcom , cadastromedico.telcel = alteracao.telcel ,cadastromedico.email = alteracao.email , cadastromedico.obs = alteracao.obs From cadastromedico INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medicoVlewAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 30, 2007 Denunciar Share Postado Outubro 30, 2007 tenta tipo assim ó:Update cadastromedicoSet cadastromedico.territorio = (Case alteracao.territorio When Null Then cadastromedico.territorio Else alteracao.territorio End)[/code] se não funcionar, tenta assim: [code]Update cadastromedicoSet cadastromedico.territorio = (Case When alteracao.territorio Is Null Then cadastromedico.territorio Else alteracao.territorio End)e assim por diante pra tdos os campos. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BurnOS Postado Outubro 30, 2007 Denunciar Share Postado Outubro 30, 2007 (editado) óia o que eu tava fazendo... :PUpdate cadastromedico case when cadastromedico.propagandista 'not null' and alteracao.propagandista 'null' then cadastromedico.propagandista = cadastromedico.propagandista else Set cadastromedico.territorio = alteracao.territorio... estou testando... jájá posto... hehehe Cara... o código ficou meio que do tamanho da porta... mas caraca!! Funfou!!!!!!!! Usei este aqui, não testei o de cima, mas por lógica me parece que ele não funciona... Update cadastromedico Set cadastromedico.territorio = (Case When alteracao.territorio Is Null Then cadastromedico.territorio Else alteracao.territorio End)agora pensa num picareta com uns trocentos comando no mesmo query e apertou F5 sem selecionar qualquer comando... detalhe, TODOS os comando estão rodando sem erros, inclusive um delete.... :PEu tava fazendo uns testes, brother, ficou jóia!!!!Eu tava pensando, meio que esse tópico cabou virando quase um tutorial né, interessante pra se procurarem algo parecido!AbraçosMe aguarde, depois desse update, vou para inclusão... hiauhauihaVlewww Editado Outubro 30, 2007 por BurnOS Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BurnOS Postado Outubro 31, 2007 Denunciar Share Postado Outubro 31, 2007 (editado) eaew Kuroi...vai vendo...estou na inclusão de cadastros agora, e pensando no código acima, fiz esse abaixo:UPDATE CADASTROMEDICO SET cadastromedico.territorio = inclusao.territorio , cadastromedico.crm_medico = (case when inclusao.crm_medico = cadastromedico.crm_medico then "CRM CADASTRADO" else inclusao.crm_medico end) , cadastromedico.especialidade = inclusao.especialidade , cadastromedico.nome = inclusao.nome , cadastromedico.endereco = inclusao.endereco , cadastromedico.propagandista = inclusao.propagandista , cadastromedico.complemento = inclusao.complemento , cadastromedico.bairro = inclusao.bairro , cadastromedico.cidade = inclusao.cidade , cadastromedico.cep = inclusao.cep , cadastromedico.uf = inclusao.uf , cadastromedico.telcom = inclusao.telcom , cadastromedico.telcel = inclusao.telcel , cadastromedico.email = inclusao.email , cadastromedico.obs = inclusao.obs FROM INCLUSAO Do jeito que está, ele só fala que o campo CRM Cadastrado (que eu gostaria que fosse uma msg, mas descobri que o sql não print msgs...), dai com oeu faço pra quando tiver o crm cadastrado já ele não incluir? tentei assim também, mas não dá certo nem a pau!!! insert into cadastromedico select * from inclusao Caraca... a inclusão também só vai se especificar todos os campos... o código ficou assim: INSERT INTO cadastromedico SELECT inclusao.territorio , inclusao.propagandista , inclusao.crm_medico /*(case when cadastromedico.crm_medico = inclusao.crm_medico then cadastromedico.crm_medico else inclusao.crm_medico end)*/ , inclusao.especialidade , inclusao.data_inclusao , inclusao.complemento , inclusao.nome , inclusao.endereco , inclusao.bairro , inclusao. cidade , inclusao.uf , inclusao.cep , inclusao.telcom , inclusao.telcel , inclusao.obs , inclusao.email FROM inclusaoEssa parte comentada no meio do código, é a parte da verificação que ainda estou brigando, mas está incluindo...AbraçosVlewww Editado Outubro 31, 2007 por BurnOS Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Novembro 3, 2007 Denunciar Share Postado Novembro 3, 2007 opa e ae.você quer q ele não deixe cadastrar duas vezes o mesmo crm_medico, é isso??cara se for, a melhor forma q vejo de fazer isso é na propria programacao mesmo (você esta trabalhando com alguma linguagem, não??). claro q existem varias formas no sql, mas na programacao você pode tratar certinho a mensagem e tudo mais. é so fazer um select pra ver se já não existe o valor q ele ta incluindo.o q você pode fazer tb no sql, é setar o campo crm_medico como chave. ai ele já bloqueia automaticamente e retorna erro quando ele tentar incluir de novo o mesmo valor.outro jeito é fazer isso por procedure, ou ainda por trigger e ai você mesmo pode montar a mensagem de erro q quiser com a funcao raiserror.um exemplo de trigger aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=106582 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest --Marina --
Pessoal, me ajudem!!!!
Preciso saber se existe alguma estrutura em sql que atualize vários registros ao mesmo tempo, neste
exemplo aqui eu consigo fazer com que ele altere um dado por vez, mas se tivesse um jeito de alterar todos ao mesmo tempo
seria de grande ajuda!
update conv_eventos
set Site_ev=35 where Site_ev=45
ou seja, eu preciso alterar mais numeros alem deste para outros e executando esta instrução em um registro de cada vez demora muito!
Não consegui usar o AND porque não são campos diferentes e sim registros diferentes no mesmo campo
valeuuu
Marina
Link para o comentário
Compartilhar em outros sites
17 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.