none
Tabelle - auslesen, ersetzen, überschreiben RRS feed

  • Frage

  • Hallo zusammen,

    ich benutze MSSQL 2008.

    Nun mein Ziel ist es, die Einträge von einer Tabelle auszulesen, überprüfen ob im Inhalt "[date]" vorhanden ist, falls ja, sollte er es mit dem aktuellen Datum ersetzen, wieder in die Dataenbank reinzuschreiben.

    Doch ehrlich gesagt, bin ich mir nicht sicher wie ich das hinkriegen sollte. Gibt es eine möglichkeit die tabelle in eine Array zu schreiben und diese dann zeilenweise abzufragen?

    Danke für euere Hilfe bereits im Voraus!

    Donnerstag, 22. November 2012 11:52

Antworten

  • Hallo,

    das kannst Du auch mengenorientiert durchführen, indem Du auf den Begriff [date] filterst und dann im Ergebnis den Begriff durch das Datum ersetzt.

    CREATE TABLE #test (Wert varchar(100));
    
    INSERT INTO #test VALUES('Hallo Welt, heute ist der [date], stimmts?');
    INSERT INTO #test VALUES('Nur ein date test');
    SELECT * FROM #test;
    
    UPDATE #test
    SET Wert = REPLACE(Wert, '[date]', CONVERT(varchar(10), GETDATE(), 104))
    WHERE Wert LIKE '%[date]%'  ESCAPE '[';
    
    SELECT * FROM #test;
    
    GO
    DROP TABLE #test;

    Das ESCAPE '[' ist nötig, da [ ]  bei der Wildcard Suche als Mengenbegrenzer für eine Auflistung an gesuchten Zeichen darstellt; von daher ist Dein Platzhalter [date] nicht so ganz günstig.

    Olaf Helper

    Blog Xing

    • Als Antwort vorgeschlagen Uwe RickenMVP Donnerstag, 22. November 2012 12:22
    • Als Antwort markiert 0bk__ Donnerstag, 22. November 2012 13:01
    Donnerstag, 22. November 2012 12:07
  • Hallo! Meinst Du so etwas?

    Declare @MyTable as Table(PK int, Inhalt varchar(100));
    
    Insert into @MyTable(PK, Inhalt) Values (1, 'Alles klar');
    Insert into @MyTable(PK, Inhalt) Values (2, 'Datum ersetzen [date]');
    
    Select *
    from @MyTable;
    
    Update @MyTable
    set Inhalt = replace(Inhalt, '[date]',convert(varchar(10), getdate(), 104))
    where Inhalt like '%[date]%'
    
    Select *
    from @MyTable;

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    • Als Antwort vorgeschlagen Uwe RickenMVP Donnerstag, 22. November 2012 12:23
    • Als Antwort markiert 0bk__ Donnerstag, 22. November 2012 13:01
    Donnerstag, 22. November 2012 12:09
  • Hallo Obk,

    das ist eigentich egal - Du mußt nur nach Möglichkeit für die Variablen einen Platzhalter finden, der nicht auch als gewöhnlicher Text vorkommt.
    Ich mache es in meinen "MessageTexten" so, daß ich immer die Variable, wie sie im Code verwendet wird, implementierte.

    Beispiel:

    DECLARE @ActDate char(10) = CONVERT(char(10), getdate(), 104);
    DECLARE @msgtext varchar(255) = 'Heute ist der @ActDate';
    
    REPLACE(@msgText, '@ActDate', @ActDate);
    PRINT @MsgText;


    Uwe Ricken

    MCITP Database Administrator 2005
    MCITP Database Administrator 2008
    MCITP Microsoft SQL Server 2008, Database Development

    db Berater GmbH
    http://www-db-berater.de
    SQL Server Blog (german only)

    • Als Antwort markiert 0bk__ Donnerstag, 22. November 2012 13:01
    Donnerstag, 22. November 2012 12:25

Alle Antworten

  • Hallo,

    das kannst Du auch mengenorientiert durchführen, indem Du auf den Begriff [date] filterst und dann im Ergebnis den Begriff durch das Datum ersetzt.

    CREATE TABLE #test (Wert varchar(100));
    
    INSERT INTO #test VALUES('Hallo Welt, heute ist der [date], stimmts?');
    INSERT INTO #test VALUES('Nur ein date test');
    SELECT * FROM #test;
    
    UPDATE #test
    SET Wert = REPLACE(Wert, '[date]', CONVERT(varchar(10), GETDATE(), 104))
    WHERE Wert LIKE '%[date]%'  ESCAPE '[';
    
    SELECT * FROM #test;
    
    GO
    DROP TABLE #test;

    Das ESCAPE '[' ist nötig, da [ ]  bei der Wildcard Suche als Mengenbegrenzer für eine Auflistung an gesuchten Zeichen darstellt; von daher ist Dein Platzhalter [date] nicht so ganz günstig.

    Olaf Helper

    Blog Xing

    • Als Antwort vorgeschlagen Uwe RickenMVP Donnerstag, 22. November 2012 12:22
    • Als Antwort markiert 0bk__ Donnerstag, 22. November 2012 13:01
    Donnerstag, 22. November 2012 12:07
  • Hallo! Meinst Du so etwas?

    Declare @MyTable as Table(PK int, Inhalt varchar(100));
    
    Insert into @MyTable(PK, Inhalt) Values (1, 'Alles klar');
    Insert into @MyTable(PK, Inhalt) Values (2, 'Datum ersetzen [date]');
    
    Select *
    from @MyTable;
    
    Update @MyTable
    set Inhalt = replace(Inhalt, '[date]',convert(varchar(10), getdate(), 104))
    where Inhalt like '%[date]%'
    
    Select *
    from @MyTable;

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    • Als Antwort vorgeschlagen Uwe RickenMVP Donnerstag, 22. November 2012 12:23
    • Als Antwort markiert 0bk__ Donnerstag, 22. November 2012 13:01
    Donnerstag, 22. November 2012 12:09
  • Ahh hopala.. wusste ich nicht. Danke Dir !!

    Klasse, was wäre deiner Meinung nach ein besserer Platzhalter?

    LG


    • Bearbeitet 0bk__ Donnerstag, 22. November 2012 12:18
    Donnerstag, 22. November 2012 12:17
  • Hallo Obk,

    das ist eigentich egal - Du mußt nur nach Möglichkeit für die Variablen einen Platzhalter finden, der nicht auch als gewöhnlicher Text vorkommt.
    Ich mache es in meinen "MessageTexten" so, daß ich immer die Variable, wie sie im Code verwendet wird, implementierte.

    Beispiel:

    DECLARE @ActDate char(10) = CONVERT(char(10), getdate(), 104);
    DECLARE @msgtext varchar(255) = 'Heute ist der @ActDate';
    
    REPLACE(@msgText, '@ActDate', @ActDate);
    PRINT @MsgText;


    Uwe Ricken

    MCITP Database Administrator 2005
    MCITP Database Administrator 2008
    MCITP Microsoft SQL Server 2008, Database Development

    db Berater GmbH
    http://www-db-berater.de
    SQL Server Blog (german only)

    • Als Antwort markiert 0bk__ Donnerstag, 22. November 2012 13:01
    Donnerstag, 22. November 2012 12:25