Replace von CHAR(0) in SQL Server varchar-Spalte

by Wolfgang Kluge Juni 30, 2009 18:46

Heute kam es in einem meiner Projekt zu folgendem Fehler

Msg 6841, Level 16, State 1, Line 1
FOR XML konnte die Daten für den 'Tabelle'-Knoten nicht serialisieren, weil ein in XML unzulässiges Zeichen (0x0000) enthalten ist. Um diese Daten mithilfe von FOR XML abzurufen, konvertieren Sie sie in den Datentyp 'binary', 'varbinary' oder 'image', und verwenden Sie die BINARY BASE64-Direktive.

Nach kurzem Suchen bemerkte ich dann, dass nicht die Ausgabe mittels FOR XML fehlerhaft war, sondern in einzelnen Feldern einer Tabelle CHAR(0)-Zeichen enthalten waren, die da nicht hingehörten. Die Tabelle wird von anderer Stelle gefüllt und eigentlich wird dabei der entsprechende Text abgeschnitten, dieses Sonderzeichens in dem Fall wohl aber nicht mehr. Nachdem die Befüllung geändert wurde, mussten die bereits geschriebenen CHAR(0)-Einträge noch geändert werden, doch dass stellte sich als schwerer heraus als zuerst angenommen. Sicher war, dass die Zeichen nur am Ende eines Textes vorkamen. Zum Testen gab es folgende temporäre Tabelle

DECLARE @test table(
    Name varchar(30) NULL COLLATE Latin1_General_CI_AS
)
INSERT INTO @test (Name)
           SELECT 'Hallo Welt 1' + CHAR(0) + CHAR(0) + CHAR(0) + CHAR(0)
 UNION ALL SELECT 'Hallo Welt 2' + CHAR(0)
 UNION ALL SELECT 'Hallo Welt 3'
 UNION ALL SELECT ''
 UNION ALL SELECT CHAR(0)
 UNION ALL SELECT CHAR(0) + CHAR(0)
 UNION ALL SELECT NULL

Das Problem sollte schnell gelöst werden können.

UPDATE  @test
SET     Name = SUBSTRING(Name, 1, CHARINDEX(CHAR(0), Name) - 1)
WHERE   Name LIKE '%' + CHAR(0) + '%'

Sieht einfach aus, macht - zumindest theoretisch - genau dass, was ich will, funktioniert aber nicht :(

vollständigen Artikel anzeigen...

Tags: ,

Microsoft SQL Server

Das IIS 7 SEO Toolkit und Live-Seiten

by wolfgang@gehirnwindung.de (Wolfgang) Juni 29, 2009 16:50

Die "Site Analysis" des IIS Search Engine Optimization Toolkits kann gut verwendet werden, um allgemein Fehler auf der eigenen Seite zu finden. Wenn man denn will kann man damit die Seite recht einfach "sauber" (z.B. von ungültigen Links) halten oder Fehler im HTML-Code entdecken. Die Sache hat nur einen Haken - das Toolkit läuft nur auf dem IIS 7. Wenn man nunmal Live aber wesentlich mehr Daten vorhält als lokal, dann (so mein erster Eindruck) muss auch das Toolkit Live installiert werden um die Seite vollständig testen zu können. Mal abgesehen davon, dass es nicht stimmt *g*, könnte auf dem Server aber auch IIS 6 oder Apache laufen oder man hat einfach überhaupt keinen administrativen Zugriff auf den Rechner.

Nun gibt es die Möglichkeit, die live-Seite lokal nachzubilden. Doch hat das wiederum einen weiteren Haken - lokal könnten komplett andere Einstellungen vorzufinden sein, eventuell fehlen weitere Server im Verbund, auf die man lokal aber auch gar nicht mehr zugreifen kann/darf. Und zudem müssten/sollten alle Einstellungen exakt gleich sein. Mal ehrlich. ich hab noch nie überprüft, ob Liste der Content-Types auch exakt gleich ist (und ich hatte es eigentlich auch nicht vor *g*).

Die Lösung ist recht simpel - wenn man sie denn kennt: das Toolkit braucht immer noch einen IIS 7, aber dieser kann sich befinden, wo es auch immer beliebt. Die zu analysierende Website muss nicht zwingend auf dem gleichen Rechner vorhanden sein. Nachdem man eine neue Seite mit beliebigem physikalischem Verzeichnis eingerichtet hat, muss man nur noch den richtigen Hostnamen wählen. In meinem Beispiel ist das KlugeSoftware.de.

vollständigen Artikel anzeigen...

Tags: ,

IIS 7.0

Powered by BlogEngine.NET 1.6.1.6
Theme by Mads Kristensen | Modified by Mooglegiant and me ;)