+ Antworten
Ergebnis 1 bis 13 von 13

Thema: search replace in allen tabellen

  1. #1
    TP-Member Floddr ist auf einem guten Weg
    Registriert seit
    Apr 2010
    Beiträge
    44

    Unhappy search replace in allen tabellen

    Hallo!

    Ich habe den unglaublich dummen Fehler gemacht, vor veöfffentlichung meiner Webseite eine test-url zu nehmen (www.beta.blub.net).
    In der Datenbank müsste das jetzt des öfteren editiert werden.

    Es würde wochen dauern, wenn ich jede Tabelle manuell durchsuche.

    Ich habe bereits diverse scripts gefunden, allerdings gibt es immer diverse Fehlermeldungen.

    Zum Beispiel "#1193 - Unknown system variable 'NOCOUNT'"

    Hier das script:
    Code:
    -- PREPARE
    SET NOCOUNT ON
    
    -- VARIABLES
    DECLARE @tblName NVARCHAR(150)
    DECLARE @colName NVARCHAR(150)
    DECLARE @tblID int
    DECLARE @first bit
    DECLARE @lookFor nvarchar(250)
    DECLARE @replaceWith nvarchar(250)
    
    -- CHANGE PARAMETERS
    SET @lookFor =  QUOTENAME('beta.LINK.net')
    SET @replaceWith = 'LINK.net'
    
    -- TEXT VALUE DATA TYPES
    DECLARE @supportedTypes TABLE ( xtype NVARCHAR(20) )
    INSERT INTO @supportedTypes SELECT XTYPE FROM SYSTYPES WHERE NAME IN ('varchar','char','nvarchar','nchar','xml')
    --INSERT INTO @supportedTypes SELECT XTYPE FROM SYSTYPES WHERE NAME IN ('text')
    
    -- ALL USER TABLES
    DECLARE cur_tables CURSOR FOR 
    SELECT SO.name, SO.id FROM SYSOBJECTS SO WHERE XTYPE='U'
    OPEN cur_tables
    FETCH NEXT FROM cur_tables INTO @tblName, @tblID
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
            -------------------------------------------------------------------------------------------
            -- START INNER LOOP - All text columns, generate statement
            -------------------------------------------------------------------------------------------
            DECLARE @temp VARCHAR(max)
            DECLARE @count INT
            SELECT @count = COUNT(name) FROM SYSCOLUMNS WHERE ID = @tblID AND 
                    XTYPE IN (SELECT xtype FROM @supportedTypes)
    
            IF @count > 0
            BEGIN
                    -- fetch supported columns for table
                    DECLARE cur_columns CURSOR FOR 
                            SELECT name FROM SYSCOLUMNS WHERE ID = @tblID AND 
                                    XTYPE IN (SELECT xtype FROM @supportedTypes)
                    OPEN cur_columns
                    FETCH NEXT FROM cur_columns INTO @colName
    
                    -- generate opening UPDATE cmd
                    SET @temp = '
            PRINT ''Replacing ' + @tblName + '''
    
            UPDATE ' + @tblName + ' SET 
                    '
                    SET @first = 1
    
                    -- loop through columns and create replaces
                    WHILE @@FETCH_STATUS = 0
                    BEGIN
                            IF (@first=0) SET @temp = @temp  + ',
                            '
                            SET @temp = @temp  + @colName
                            SET @temp  = @temp  + ' = REPLACE(' +  @colName + ',''' 
                            SET @temp  = @temp  + @lookFor 
                            SET @temp  = @temp  + ''',''' 
                            SET @temp  = @temp  + @replaceWith
                            SET @temp  = @temp  +  ''')'
    
                            SET @first = 0
    
                            FETCH NEXT FROM cur_columns INTO @colName
                    END
    
                    PRINT @temp
    
                    CLOSE cur_columns
                    DEALLOCATE cur_columns
            END
            -------------------------------------------------------------------------------------------     
            -- END INNER
            -------------------------------------------------------------------------------------------
    
            FETCH NEXT FROM cur_tables INTO @tblName, @tblID
    END
    
    CLOSE cur_tables
    DEALLOCATE cur_tables

  2. #2
    TP-Moderator Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.608
    Ich kann Dir zwar keine Lösung bieten, aber Dein Skript scheint für MS SQL gedacht zu sein. Verwendest Du MySQL oder MS SQL?
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  3. #3
    TP-Member Floddr ist auf einem guten Weg
    Registriert seit
    Apr 2010
    Beiträge
    44
    MySQL...

    Ich wusste das nicht. Ich habe keine Ahnung von sowas...

  4. #4
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    UPDATE
    `tabellen_name`
    SET
    spalte = REPLACE(spalte, 'suche_string','ersetze_string');

    Fertig ^^
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  5. #5
    TP-Member Floddr ist auf einem guten Weg
    Registriert seit
    Apr 2010
    Beiträge
    44
    Das ist doch das Problem. Dann muss ich ALLE Tabellen einzeln durchleuchten. Jede Spalte (das sind etwa 50 Tabellen mit je zwischen 2-50 Spalten!).

    Gibt es da nichts...

  6. #6
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Die URLs stehen doch nicht in jeder Tabelle und in jeder Spalte drin ...?
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  7. #7
    TP-Member Floddr ist auf einem guten Weg
    Registriert seit
    Apr 2010
    Beiträge
    44
    Nein, aber an sehr vielen Stellen.

    Es währe nochml extrem viel Arbeit ausfindig zu machen, wo die stehen.

  8. #8
    TP-Moderator Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.608
    Du könntest mit show tables an die Namen der Tabellen und mit show columns an die Namen der Spalten kommen. Mit diesen Daten kannst Du dann Deine Update-Statements generieren. Entweder php-skriptseitig oder Du nutzt die Daten als Basis für Dein manuell zu erstellendes Skript.

    Wenn Du aber eine DB mit 50 Tabellen aufgebaut hast, dann sollte das für Dich kein Problem sein.
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  9. #9
    TP-Member Floddr ist auf einem guten Weg
    Registriert seit
    Apr 2010
    Beiträge
    44
    Vielen Dank!
    Ich werde es jetzt gleich so probieren.

    Aber ginge es nicht auch die DB als eine Textdatei oder was auch immer zu exportieren und mit PSPad oder so die Sachen zu ersetzen und dann das ganze wieder zu importieren?

  10. #10
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Klar, das geht natürlich auch.
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  11. #11
    TP-Member Floddr ist auf einem guten Weg
    Registriert seit
    Apr 2010
    Beiträge
    44
    Öh. Und warum macht man das dann nicht so? Ist doch viel einfacher.

    Kannst du mir sagen, wie man das exportiert?

  12. #12
    TP-Moderator Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.608
    Weil Du so einen Stand exportierst, also quasi einfrierst und dann wieder importierst. In der Zwischenzeit kann sooo viel passiert sein, was Du dann verlieren würdest

    Ne, im Ernst, es kommt halt auf die Datenmengen an, manchmal macht es halt keinen Sinn alles zu exportieren um an ein paar Stellen was zu ändern. Vorausgesetzt man kennt sein Datenbank.

    Einen Export kannst Du direkt in phpmyadmin machen.
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  13. #13
    TP-Member Floddr ist auf einem guten Weg
    Registriert seit
    Apr 2010
    Beiträge
    44
    Auf der Seite passiert noch nicht viel (hatte sie ja bisher zum erstellen erstmal auf einer sub-domain), also wird's schon klappen.

    Ich danke dir

+ Antworten

Ähnliche Themen

  1. replace() bei zeilenumbruch
    Von stinger_5 im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 15.04.2010, 15:19
  2. Javascript replace()
    Von preyz im Forum Javascript & Ajax
    Antworten: 8
    Letzter Beitrag: 31.07.2007, 17:33
  3. [MySQL] Replace
    Von Bernhard_at im Forum Traum-Dynamik
    Antworten: 5
    Letzter Beitrag: 06.06.2005, 13:36
  4. replace
    Von Messiah im Forum Traum-Dynamik
    Antworten: 3
    Letzter Beitrag: 20.06.2003, 13:06
  5. Fehler bei str-replace ;/
    Von alfmanuel im Forum Traum-Dynamik
    Antworten: 1
    Letzter Beitrag: 18.05.2003, 17:14

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51