none
UPDATE Urgente RRS feed

  • Pergunta

  • Boa tarde,

    Gostaria de uma ajuda.
    Primeiro vou dizer o problema e posteriormente solicito a ajuda.
    Em várias tabelas do Meu SQL Server 2000, tabelas aleatórias foram incluídas no final do texto uma URL(foi causado por vírus ou pessos mal intessionadas, ainda estamos em análise).
    Dessa forma queria fazer um UPDATE nessas tabelas excluíndo esse texto específico.

     

    Agurado respostas,
    Se tiverem alguma dúvidas podem perguntar.

    Obrigado,

     

    Edivar Barbosa

    segunda-feira, 16 de junho de 2008 18:29

Todas as Respostas

  • Boa Tarde,

     

    Vou traduzir um pouco mais tecnicamente sua necessidade

     

    - Você deseja dar um UPDATE em todas as colunas texto substituindo o texto malicioso por um outro texto ou até eliminar o texto malicioso.

     

    Seria isso ?

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 16 de junho de 2008 18:39
  • Exato, substituir todos os textos onde tem o texto malicioso por NADA.

    segunda-feira, 16 de junho de 2008 18:44
  • Oi Edivar,

     

    Como trata-se de uma situação urgente não me preocupei com um script mais elaborado. O script abaixo irá gerar as instruções de UPDATE para desfazer o mal feito.

     

    Code Snippet

    DECLARE @texto VARCHAR(100)

    SET @texto = 'Texto a ser eliminado'

     

    SELECT

    'UPDATE [' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] ' +

    'SET [' + COLUMN_NAME + '] = ' +

    'REPLACE([' + COLUMN_NAME + '],' + '''' + @texto + '''' + ',' + '''' + '''' + ')'

    FROM INFORMATION_SCHEMA.COLUMNS

    WHERE DATA_TYPE IN ('nvarchar','varchar','text','ntext','char','nchar')

     

     

    [ ]s,

     

    Gustavo

    segunda-feira, 16 de junho de 2008 18:56
  •  

    Oi Gustavo,

     

    Deu certo em algumas mas em outras deu um erro.

     

    Server: Msg 8116, Level 16, State 1, Line 1
    Argument data type text is invalid for argument 1 of replace function.

    segunda-feira, 16 de junho de 2008 19:07
  • Oooopsss,

     

    Esqueci de avisar que o TEXT e o NTEXT não aceitam REPLACE. Para esses você pode ter que editar na mão. São muitos ?

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 16 de junho de 2008 19:15
  •  

    Não são muitos, dessa forma farei na mão esses campos.

    Deu tudo certo.

    MUUUUITO obrigado, foi providencial a dica...

     

    Valeu...

    segunda-feira, 16 de junho de 2008 19:19
  • Ok Edivar,

     

    Que bom que a mesma lhe ajudou

     

    Infelizmente o UPDATE em colunas TEXT é muito complicado. Se você estiver usando o SQL Server 2005 recomendo alterar esse tipo para VARCHAR(MAX) ou NVARCHAR(MAX).

     

    Se puder classificar a resposta

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 16 de junho de 2008 19:31
  • Edivar,

     

    Veja se este exemplo ajuda:

     

    Code Snippet

    Set NoCount On

     

    Declare @Tabelas Table (Idx Int Identity(1,1), TblName Varchar(100))

    Insert into @Tabelas (TblName)

     

    Select Table_Name From Information_Schema.Tables Where Table_Type = 'Base Table'

     

    Declare @Start Int

    Declare @End Int

    Declare @Command Varchar(1000)

     

    Select @Start = 1, @end = Max(Idx) From @Tabelas

     

    While @Start <= @End

    Begin

     Select @Command = 'update '+ TblName From @Tabelas Where Idx = @Start

     Select @Command=@Command+' Set Coluna= ''aaa'''

     

     Exec(@Command)

     Set @Start = @Start + 1

    End

     

     

    segunda-feira, 16 de junho de 2008 19:33
  •  

    É pessoal, quando se trata de colunas do tipo ('nvarchar','varchar','char','nchar') tudo bem, mas realmente quando temos colunas  ('text','ntext') não dá certo o camando de REPLACE abaixo:

     

    UPDATE [banco].[owner].[tabela] SET [coluna] = REPLACE([coluna],'Texto a ser eliminado','')

     

    Tem como fazer o REPLACE em compos text e ntex ???

     

    Obrigado,

    quarta-feira, 25 de junho de 2008 18:22