Ir para conteúdo
Fórum Script Brasil
  • 0

Update


Guest --Marina --

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

  • 0

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 cadastromedico

SELECT * FROM alteracao

WHERE cadastromedico.crm_medico = alteracao.crm_medico

Dá esse erro:

Server: Msg 107, Level 16, State 3, Line 1

The 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

Link para o comentário
Compartilhar em outros sites

  • 0

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 por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

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 cadastromedico
INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medico
Set cadastromedico.campo1 = alteracao.campo1,
cadastromedico.campo2 = alteracao.campo2,
cadastromedico.campo3 = alteracao.campo3,
....
cadastromedico.campon = alteracao.campon[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

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 1

An 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 2

Incorrect syntax near the keyword 'INNER'.

Tentei fazer assim também:

Update cadastromedico

Set cadastromedico.territorio = alteracao.territorio

Fica dando esse erro:

Server: Msg 107, Level 16, State 3, Line 1

The 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

Link para o comentário
Compartilhar em outros sites

  • 0

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 cadastromedico
Set cadastromedico.campo1 = alteracao.campo1,
cadastromedico.campo2 = alteracao.campo2
From cadastromedico INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medico[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi, vlew mesmo. Funfou beleza. Colocando campo por campo... eu até tentei deixar assim:

Update cadastromedico

Set 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!!!!!

Link para o comentário
Compartilhar em outros sites

  • 0
Update cadastromedico

Set cadastromedico.* = alteracao.*

From cadastromedico INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medico

haha 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.

Link para o comentário
Compartilhar em outros sites

  • 0

hauihai

eu até tou tentando umas maluquices aqui...

Update cadastromedico

Set [dbo].[cadastromedico].[*] = [dbo].[alteracao].[*]

From cadastromedico INNER JOIN alteracao ON cadastromedico.crm_medico = alteracao.crm_medico

ele dá esse erro... vê se dá alguma luz... :P

Server: Msg 1032, Level 15, State 1, Line 2

Cannot use the column prefix 'dbo.cadastromedico'. This must match the object in the UPDATE clause 'cadastromedico'.

Se eu descobrir posto com certeza!! hehe

Abraços e vlew mais uma vez!!! Vou procurar o CASE...

Link para o comentário
Compartilhar em outros sites

  • 0
Server: Msg 1032, Level 15, State 1, Line 2

Cannot 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 cadastromedico

Set 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_medico

Vlew

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

tenta tipo assim ó:

Update cadastromedico
Set cadastromedico.territorio = (Case alteracao.territorio When Null Then cadastromedico.territorio Else alteracao.territorio End)[/code] se não funcionar, tenta assim:
[code]Update cadastromedico
Set cadastromedico.territorio = (Case When alteracao.territorio Is Null Then cadastromedico.territorio Else alteracao.territorio End)

e assim por diante pra tdos os campos.

Link para o comentário
Compartilhar em outros sites

  • 0

óia o que eu tava fazendo... :P

Update 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.... :P

Eu 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ços

Me aguarde, depois desse update, vou para inclusão... hiauhauiha

Vlewww

Editado por BurnOS
Link para o comentário
Compartilhar em outros sites

  • 0

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 inclusao

Essa parte comentada no meio do código, é a parte da verificação que ainda estou brigando, mas está incluindo...

Abraços

Vlewww

Editado por BurnOS
Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...