Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

VARCHAR(MAX) Textbehandlung mittels .WRITE

20. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

 Bis einschließlich SQL Server 2000 konnte man lange Texte, größer 8KB, nur als LOB (large object) ablegen. Dadurch war das „Bearbeiten“ von diesen Texten per T-SQL entsprechend kompliziert und umständlich. 
 Mit SQL Server 2005 wurde dann der neue Datentyp VARCHAR(MAX) und damit auch die neue .WRITE-Syntax eingeführt, dass es einem etwas vereinfacht.
 UPDATE  
  { { <object> } 
 SET  
  { { column_name { .WRITE ( expression , @Offset , @Length ) } 
   

Bei der Syntax vermisst man zunächst das Gleichheitszeichen, aber .WRITE (Punkt Write) stellt eine statische Funktion zum Datentypen VARCHAR(MAX) da.
Hier ein Beispiel T-SQL Script zur Verwendung der Funktion:

 SET NOCOUNT ON 
 -- Temporäre Tabelle anlegen 
 CREATE TABLE ##myLongText 
  (ID int NOT NULL PRIMARY KEY, 
   LongText varchar(max)); 
 GO 
 --Einen Beispielsatz einfügen 
 INSERT INTO ##myLongText  
 VALUES (1, 'Ich werde später einmal ein langer Textblock'); 
 -- Kontrollausgabe 
 SELECT * FROM ##myLongText; 
   
 --Text innen einfügen 
 UPDATE ##myLongText 
 SET LongText .Write(', wenn ich groß bin,', 16, 0) 
 WHERE ID = 1; 
 SELECT * FROM ##myLongText; 
   
 -- Text innen ersetzen 
 UPDATE ##myLongText 
 SET LongText .Write('alt', CHARINDEX('groß', LongText, 1) - 1, LEN('groß')) 
 WHERE ID = 1; 
 SELECT * FROM ##myLongText; 
   
 -- Textende ersetzen  
 UPDATE ##myLongText 
 SET LongText .Write('Artikel', 54, NULL) 
 WHERE ID = 1; 
 SELECT * FROM ##myLongText; 
   
 -- Am Textende anfügen 
 UPDATE ##myLongText 
 SET LongText .Write(' in einem Blog', LEN(LongText), NULL) 
 WHERE ID = 1; 
 SELECT * FROM ##myLongText; 
   
 DROP TABLE ##myLongText; 
   
 Ergebnis: 
   
 ID LongText 
 ----------- ----------------------------------------------------------------- 
 1 Ich werde später einmal ein langer Textblock 
   
 ID LongText 
 ----------- ----------------------------------------------------------------- 
 1 Ich werde später, wenn ich groß bin, einmal ein langer Textblock 
   
 ID LongText 
 ----------- ----------------------------------------------------------------- 
 1 Ich werde später, wenn ich alt bin, einmal ein langer Textblock 
   
 ID LongText 
 ----------- ----------------------------------------------------------------- 
 1 Ich werde später, wenn ich alt bin, einmal ein langer Artikel 
   
 ID LongText 
 ----------- ----------------------------------------------------------------- 
 1 Ich werde später, wenn ich alt bin, einmal ein langer Artikel in einem Blog 
   

Diesen Post teilen

Repost 0

Kommentiere diesen Post