Jump to content

MSSQL varchar(4000) -> image


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hi,

 

also das select statement und das insert statement an sich sind natürlich kein Problem ;). Ich frag mich an sich nur wie ich den string den ich aus dem varchar raus bekomme in ein objekt für image umwandle (normal würde man das ja über curser machen).

 

Der Einfachheit halber vielleicht folgendes:

Tabelle mit zwei Spalten:

Spalte 1: ID (int)

Spalte 2: Daten (image)

 

Wenn ich jetzt folgenden query ausführe:

 

insert dbo.TestDB (ID, Daten) VALUES (1, "Ich bin der Text aus dem varchar")

 

dann wird dieser mit folgender Meldung nicht ausgeführt:

 

Msg 128, Level 15, State 1, Line 1

The name "Ich bin der Text aus dem varchar" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.

Link zu diesem Kommentar

Moin,

 

dein Test scheitert an falschen Begrenzern. In SQL nutzt man den Apostroph ' für Zeichenketten, nicht die doppelten Anführungszeichen. Letztere stehen für Spaltennamen und Bezeichner ... richtig wäre:

 

insert dbo.TestDB (ID, Daten) VALUES (1, 'Ich bin der Text aus dem varchar')

 

Du kannst in eine image-Spalte ganz normal Textwerte einfügen. Folgendes sollte also gehen:

 

INSERT Zieltabelle (ID, Daten)
SELECT idData, tdText
FROM Ausgangstabelle
WHERE Filter

 

Hab ich extra gestern für dich getestet. ;)

 

Gruß, Nils

Link zu diesem Kommentar

Hi,

 

... du hast mal wieder recht - das kommt davon wenn man seine Frage erst ein zwei Wochen nachdem auftreten des Problems stellt ;).

 

Ich habe gerade noch mal meine TestQuery los geschickt und die läuft auch ohne Probleme durch (deshalb hab ich die Frage wohl das letzte mal auch nicht gestellt :D). Die Anwendung kann die Daten aber nicht anzeigen - das ist wohl aber eher ein Problem der Anwendung und nicht der Datenbank...

 

... ich werd alt...

 

Danke

Link zu diesem Kommentar

Hi,

 

geb ich dir vollkommen Recht - mir würde sogar ein varchar vollkommen reichen. Leider ist das ne 3rd - party app und ich hab nur das zweifelhafte Vergnügen eine initiale Datenbefüllung vornehmen zu dürfen...

 

Ich hab zwischenzeitlich auch mein Ursprüngliches Problem wieder "gefunden" aber auch eine Lösung dafür. Das sind nämlich nicht einfach nur Blobs die Anwendung speichert darin auch rtf felder ab, ergo erwartet die Anwendung auch einen entsprechenden Aufbau der Daten...

Link zu diesem Kommentar

... langsam erinnere ich mich auch wieder warum ich nie daran gedacht habe Entwickler zu werden...

 

Ich habe mir jetzt eine Funktion geschrieben, die mir meine Strings wie gewünscht umwandelt und damit quasi für mein blob vorbereitet:

if exists (select * from information_schema.routines where routine_name = N'string2rtf' and routine_type = 'function') drop function [dbo].[string2rtf]
GO
CREATE FUNCTION dbo.string2rtf(@string varchar(8000))       
returns varchar(8000)
AS
BEGIN      

 DECLARE @praefix varchar(200)       
 DECLARE @suffix varchar(200)   
 DECLARE @rtfstring varchar(8000)    

 SET @praefix = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}\viewkind4\uc1\pard\f0\fs17 '
 SET @suffix = '\par}'
 SET @rtfstring = NULL

 SET @rtfstring = @praefix + @string + @suffix;
 SET @rtfstring = REPLACE(@rtfstring,CHAR(9),'\tab ');
 SET @rtfstring = REPLACE(@rtfstring,CHAR(13) + CHAR(10),'\par ');
 SET @rtfstring = REPLACE(@rtfstring,CHAR(13),'\par ');
 SET @rtfstring = REPLACE(@rtfstring,CHAR(10),'\par ');
 SET @rtfstring = REPLACE(@rtfstring,'ä','\''e4');
 SET @rtfstring = REPLACE(@rtfstring,'Ä','\''c4');
 SET @rtfstring = REPLACE(@rtfstring,'ü','\''fc');
 SET @rtfstring = REPLACE(@rtfstring,'Ü','\''dc');
 SET @rtfstring = REPLACE(@rtfstring,'ö','\''f6');
 SET @rtfstring = REPLACE(@rtfstring,'Ö','\''d6');
 SET @rtfstring = REPLACE(@rtfstring,'ß','ss');
 SET @rtfstring = REPLACE(@rtfstring,'€','\''80');

return @rtfstring
end     

 

Das Funktioniert soweit wie es soll.

 

Jetzt scheitere ich aber irgnedwie an dem Update Query - ich hätte wetten können, dass das so geht:

 

UPDATE dbo.TestDB AS A SET Beschreibung = Beschreibungsstring FROM (SELECT dbo.string2rtf(Beschreibungsstring) FROM dbo.TestDB AS B where A.ID = B.ID)

 

... leider lieg ich da mal wieder falsch - der MSSQL Server mag da keine AS Statement sehen *heul* Kann mir noch jemand einen Tipp geben wie ich das hin bekomme?

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...