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

(Resolvido) Verificação de alteração em campos


NIK

Pergunta

Ola... pessoal

Tenho duas bases uma chamada A e outra B, e elas tem as mesmas tabelas. Vamos pegar em especial a tabela de clientes

O que eu preciso

As duas tem um cliente cadastrado, porém, na base A nessa tabela (cliente) fizeram uma alteração no campo endereço.

Como faço para atualizar a base B atraves de uma sp, não sei se dá, mas não queria fazer campo a campo, alguma coisa que verificasse que existe um campo diferente dentro da tabela para mim.

Valeu galera

Obrigado

NIK

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Amigo,

No exemplo que deu, você quer verificar o conteúdo de todos os campos da tabela Cliente, entre as duas bases e atualizar se tiverem diferentes?

Caso seja isto, terá que fazer campo a campo mesmo.

Pode ser realizado da seguinte forma:

- Selecionar os campos da tabela Cliente

(select c.name from sysobjects o, syscolumns c where o.name='Cliente'

and o.id=c.id)

- Gravar estes campos em uma tabela auxiliar

- Montar dinamicamente o script, passando as colunas para serem verificadas

- Caso os dados sejam diferentes, "updatar".

Fazendo desta forma, o script não ficará grande e não haverá a necessidade de manutenção, caso novas colunas forem inseridas.

Caso tenha alguma dúvida na montagem, pode postar. :.)

Link para o comentário
Compartilhar em outros sites

  • 0

Sim...

Execute o script por inteiro. Se na base tiver alguma coluna de nome "Codigo", retornará o 1º registro.

Caso queira fazer outras pesquisas, basta "setar" a variável @Coluna (o que fará para percorrer todas as colunas da tabela Cliente).

Declare @Sql varchar(255)
Declare @Coluna varchar(50)

Set @Coluna = 'Codigo'
Set @Sql = ('select top 1 * from syscolumns where name ='+''''+ @Coluna +'''')

exec (@Sql)

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe Fulvio... meus conhecimentos ainda não estão nesse nível... :blush: mas um dia chego lá :rolleyes:

Bem... Entendi assim

- Selecionar os campos da tabela Cliente (select c.name from sysobjects o, syscolumns c where o.name='Cliente' and o.id=c.id)

OK - nesse caso aparecerá todas as colunas da minha tabela cliente

- Gravar estes campos em uma tabela auxiliar

Ok - pego esses dados e gravo em uma tabela auxiliar.

- Montar dinamicamente o script, passando as colunas para serem verificadas

Bem... verifique com seu script que retorna dados da syscolumns porém não entendi, pois no caso como faço para ver o que está em cada célula da coluna??

- Caso os dados sejam diferentes, "updatar".

Aqui ainda vou verificar...

Obrigado

NIK

Link para o comentário
Compartilhar em outros sites

  • 0

O básico você já sabe... agora é só colocar em prática.... rs.

Fiz um exemplo pra entender melhor. Neste exemplo, crio fisicamente duas tabelas: ClienteBase1 e ClienteBase2.

Insiro alguns dados e depois faço a compatibilização.

Na compatibilização, crio uma tabela auxiliar para armazenar o nome das colunas. Ai faço um loop para conferir os dados de todas as colunas. Dá uma olhada e vê se entende. Entendendo, aí fica fácil de adaptar. O exemplo está comentado.

Só mais uma coisa: se as bases estiverem no mesmo Servidor, basta utilizar o comando USE NomeBD para alterar o BD. Caso esteja em servidores diferentes, terá que fazer um Linked Server para isto.

Qualquer dúvida, pode postar.

-- Criação das tabelas
create table ClienteBase1 (Codigo int, Nome varchar(50), Comentario varchar(50))
create table ClienteBase2 (Codigo int, Nome varchar(50), Comentario varchar(50))

-- Inserção dos dados na Base1 
insert into ClienteBase1 values (100, 'Nome Teste 1', 'Este comentario do Cliente 1 foi alterado')
insert into ClienteBase1 values (101, 'Nome Teste 2', 'Comentario do Cliente 2')
insert into ClienteBase1 values (102, 'Nome Teste 3', 'Comentario do Cliente 3')

-- Inserção dos dados na Base2
insert into ClienteBase2 values (100, 'Nome Teste 1', 'Comentario do Cliente 1')
insert into ClienteBase2 values (101, 'Nome Teste 2', 'Comentario do Cliente 2')
insert into ClienteBase2 values (102, 'Nome Teste 3', 'Comentario do Cliente 3')

-- Verificação
select * from ClienteBase1
select * from ClienteBase2

-- Criação da tabela auxiliar. Tabela existe enquanto a instância existir.
create table #Colunas (Coluna varchar(50), Controle int identity)

-- Inserção dos Dados
insert into #Colunas
select c.name from sysobjects o, syscolumns c where o.name='ClienteBase1' and o.id=c.id

-- Verificação
select * from #Colunas

-- Declaração de variaveis. Selecionar e rodar até o ****
Declare @Sql varchar(255)
Declare @Coluna varchar(50)
Declare @Contador int

-- Setando o contador para utilizar com o campo Controle
Set @Contador = 1

-- Atribuindo o nome da coluna à variavel
Set @Coluna = (select Coluna from #Colunas where controle=@Contador)

-- Repetir enquanto o Contador for menor que o quantidade de colunas
While @Contador <= (select max(controle) from #Colunas) 
Begin
  -- Montagem do update
  Set @Sql = ('update ClienteBase2 set ' + @Coluna + '=b1.' + @Coluna + ' from ClienteBase1 b1, ClienteBase2 b2 where b1.codigo=b2.codigo')
  exec (@Sql)
  -- Incremento do contador
  Set @Contador = @Contador + 1
  -- Pegando a próxima coluna
  Set @Coluna = (select Coluna from #Colunas where controle=@Contador)
End
--Rodar até aqui ****

-- Verificação
select * from ClienteBase1
select * from ClienteBase2

Link para o comentário
Compartilhar em outros sites

  • 0

rs... que isso. estou aprendendo igual a todos!!

Só um comentário: ao fazer o update, você faz em massa. Não vale a pena você verificar cada campo. Se fizer isto, gastará muiiito tempo. rs.

Estamos ai. Qualquer dúvida que tiver, pode postar!!! :.)

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...