Wenn man mal versehentlich (?) eine Varchar-Spalte nach image konvertierte (von nvarchar nach image geht aus nahe liegenden Gründen übrigens nicht), dann kann man den Inhalt übrigens doch noch lesen. Aber nur über zwei Ecken.
CREATE TABLE MyTest ( -- Testtabelle anlegen
id integer IDENTITY(1,1) NOT NULL,
str varchar(100) NULL)
INSERT INTO MyTest (str) – irgendwas einfügen
SELECT name
FROM sysobjects
ALTER TABLE MyTest – und nun nach image konvertieren
ALTER COLUMN str image NULL
Versucht man die direkte Rück-Konvertierung ("CONVERT(varchar(2000),str)"), dann stößt man an die Grenzen des üblen Image-Typs: "Explicit conversion from data type image to varchar is not allowed."
Bisher kenne ich schon viele gründe die "neuen" Typen varchar(max) bzw. varbinary(max) einzusetzen, aber warum jemand immer noch den Typ image verwendet, ist mir ein Rätsel.
Um die Konvertierung dennoch hinzubekommen, muss man über diese beiden Brücken gehen:
SELECT str, CONVERT(varchar(max),CONVERT(varbinary(max),str)) AS "converted"
FROM MyTest
Schon prima, oder? OK, das gehört zweifellos in die Kategorie "Probleme, die man nicht haben muss", aber das kommt in der Praxis durchaus vor… 😉