Atualizar direto

22/12/2006

Olá galera tudo bem?
Estou com um grande, gigantesco problema. Nó stemos um sistema aqui que apresenta em torno de 1230 tabelas, e destas umas 1200 tem um campo chamado EMPRESA onde ele grava o ID da empresa que está sendo utilizado.
O que eu gostaria era de, como fazer via sql, trigger ou Store uma maneira de ele atualizar os dados deste campo, ou seja, atualmente este campo esta sendo alimentado como 1, e agora ele quer passar para a segunda empresa que é a de código 2.
Como eu faço isto? Atualizo estes dados destas tabela sem precisar criar uma sentença SQL de update para cada tabela? Imagina eu criar um [b:81935aa0cf]update TABELA set EMPRESA = 2 where EMPRESA = 1[/b:81935aa0cf] para todas as 1200 tabelas. Vai demorar d+.

Aguardo alguma sugestão.

Atenciosamente


Edmarcarvalhaes

Respostas

23/12/2006

Psergio.p

Caro amigo, só uma pergunta antes de te ajudar: Não existem dados relacionados com estas tabelas? como ficariam, seriam alterados em cascata?


Responder Citar

23/12/2006

Edmarcarvalhaes

Olá doutor tudo bem?
Não.. para estes campo não existe dados relacionados. O que eu relaciono são os campos de ID de cada tabela. Por isto eu deseja alterar este código para todas as tabelas automaticamente.

Aguardo uma sugetão.


Responder Citar

26/12/2006

Edmarcarvalhaes

Olá galera tudo bem?

Kd a minha resposta. Será que alguém pode me ajudar no item acima?


Responder Citar

26/12/2006

Psergio.p

Caro amigo,

Me dá um feedback depois!
Segue o código:

DECLARE @strSQL NVARCHAR(200)
DECLARE @TableName NVARCHAR(200)

DECLARE CURATU CURSOR FOR
SELECT sysobjects.name FROM syscolumns INNER JOIN
sysobjects ON sysobjects.ID = syscolumns.ID WHERE
sysobjects.xtype = ´U´ AND syscolumns.name = ´<SUA COLUNA AQUI>´
OPEN CURATU
FETCH NEXT FROM CURATU INTO @TableName

WHILE @@FETCH_STATUS = 0
BEGIN
SET @strSQL = ´UPDATE ´ + @TableName + ´ SET <SUA COLUA AQUI> = 10´
EXEC(@strSQL)
FETCH NEXT FROM CURATU INTO @TableName
END
CLOSE CURATU
DEALLOCATE CURATU


Responder Citar

26/12/2006

Psergio.p

Corrigindo:

DECLARE @strSQL NVARCHAR(200)
DECLARE @TableName NVARCHAR(200)

DECLARE CURATU CURSOR FOR
SELECT sysobjects.name FROM syscolumns INNER JOIN
sysobjects ON sysobjects.ID = syscolumns.ID WHERE
sysobjects.xtype = ´U´ AND syscolumns.name = ´<SUA COLUNA AQUI>´
OPEN CURATU
FETCH NEXT FROM CURATU INTO @TableName

WHILE @@FETCH_STATUS = 0
BEGIN
SET @strSQL = ´UPDATE ´ + @TableName + ´ SET <SUA COLUA AQUI> = <SEU VALOR AQUI>´
EXEC(@strSQL)
FETCH NEXT FROM CURATU INTO @TableName
END
CLOSE CURATU
DEALLOCATE CURATU


Responder Citar

26/12/2006

Edmarcarvalhaes

Eu posso fazer isto direto dentro de uma TRIGGER. Vou testar e te aviso.

Obrigado


Responder Citar

27/12/2006

Edmarcarvalhaes

Olá tudo bem?
Eu posso colocar este código dentro do QUERY ANALIZER e executar o comando?
OU devo fazer como uma trigger e atualizar uma tabela para ele atualizar tudo?


Responder Citar

27/12/2006

Psergio.p

Executa direto no Query Analyser!


Responder Citar