Array
(
)

Atualizar direto

Edmarcarvalhaes
   - 22 dez 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 update TABELA set EMPRESA = 2 where EMPRESA = 1 para todas as 1200 tabelas. Vai demorar d+.

Aguardo alguma sugestão.

Atenciosamente

Psergio.p
   - 23 dez 2006

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

Edmarcarvalhaes
   - 23 dez 2006

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.

Edmarcarvalhaes
   - 26 dez 2006

Olá galera tudo bem?

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

Psergio.p
   - 26 dez 2006

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

Psergio.p
   - 26 dez 2006

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

Edmarcarvalhaes
   - 26 dez 2006

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

Obrigado

Edmarcarvalhaes
   - 27 dez 2006

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?

Psergio.p
   - 27 dez 2006

Executa direto no Query Analyser!