2016-06-17 10 views
-1

Ich habe eine Konfigurationstabelle, wo Anwendungs-URL gespeichert bekommen. Anwendung ist auf verschiedenen Servern und jedes Mal, wenn wir einen neuen Server einrichten müssen, müssen wir die Werte aktualisieren, indem wir eine while-Schleife in sql auswählen und ausführen. Scenerios ist wieaktualisieren basierend auf angepassten Muster

Tabelle: Konfiguration

Id | key | DefaultUrl 

1 | Key1 | www.xxx.com/something1 

2 | key2 | www.xxx.com/something2 

3 | key3 | www.xxx.com/something3 

Es Werte zu viele mehr Tasten auf diesem Muster und einem anderen Tisch. Da dies eine Legacy-Software ist, kann ich die Struktur nicht ändern.

Immer wenn ich einen neuen Server einrichten muss, muss ich den URL-Teil von www.xxx.com zu www.yyy.com ersetzen. Um dies zu erreichen wir tun so etwas wie

  • Schreibt eine Auswahlabfrage auf wie Muster
  • Schleife durch die Daten und ersetzen Sie die Daten in jeder Zeile nacheinander.

So im Moment suche ich einen besseren Ansatz, um das gleiche zu erreichen. Bitte helfen Sie!

+0

HAWE Sie versucht schon alles? – xdd

+0

nicht viel in meinem Kopf oder in Google kommen, habe ich sich nur wählen und Loop-Ansatz –

+1

„Ich kann nicht die Struktur verändern“ - was ist mit einer neuen Basistabelle (n) mit den statischen und dynamischen Teilen in separaten Spalten, dann einem 'VIEW', um die geteilten Teile in einer einzelnen Spalte wieder zusammenzufügen, wobei die' VIEW' den gleichen Namen wie die ursprüngliche (jetzt weggelassene) Tabelle hat? – onedaywhen

Antwort

1

Das einzig mögliche Problem ist, wenn www.xxx.com irgendwo in der Mitte der URL ist und es ersetzt nicht werden soll. Verwenden Sie zum Beispiel ein verbotenes URL-Zeichen ' '.

UPDATE [Configuration Values] 
SET DefaultUrl = replace(' '+DefaultUrl, ' www.xxx.com', 'www.yyy.com') 
WHERE DefaultUrl LIKE 'www.xxx.com%' 
0

können Sie Funktion ersetzen verwenden. Versuchen Sie, wie diese,

DECLARE @Table TABLE (
    id INT 
    ,[key] VARCHAR(10) 
    ,DefaultUrl VARCHAR(100) 
    ) 

INSERT INTO @Table 
VALUES (
    1 
    ,'Key1' 
    ,'www.xxx.com/something1' 
    ) 
    ,(
    2 
    ,'key2' 
    ,'www.xxx.com/something2' 
    ) 
    ,(
    3 
    ,'key3' 
    ,'www.xxx.com/something3' 
    ) 

SELECT replace(DefaultUrl, 'www.xxx.com', 'www.yyy.com') 
FROM @Table 

UPDATE @Table 
SET DefaultUrl = replace(DefaultUrl, 'www.xxx.com', 'www.yyy.com') 
where ..... 
0

Ich vermute, Sie so etwas wie dies will:

insert into configuration (key, defaulturl, . . .) 
    select key, replace(defaulturl, 'www.xxx.com', 'www.yyy.com') 
    from configuration 
    where defaulturl like '%www.xxx.com%'; 

Dies wird der Schlüsselwert für xxx für yyy in der Konfigurationstabelle replizieren.

Verwandte Themen