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

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Geschrieben

Moin,

 

siehste. :cool:

 

image-Daten werden als BLOB gespeichert und müssen dann auch als solches ausgelesen werden. Vielleicht wäre für deinen Fall ntext eine Alternative, das sollte direkt auslesbar sein, wird aber ebenso separat gespeichert.

 

Gruß, Nils

Geschrieben

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...

Geschrieben

... 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?

Geschrieben

Hi,

 

also mir Cursern hatte ich bis jetzt recht wenig zu tun ;)

 

Der Query soll auch nur ein Mal durchlaufen (kann daher auch unperformant sein). Es geht an sich nur um einen initialen Datenupload in eine Datenbank - danach werden alle Änderungen etc. über die Anwendung selbst durchgeführt und ich bin raus :D

Geschrieben

Hi,

 

wo ist der Wald - ich seh nur Bäume...

 

du hast natürlich recht - ich war so darauf fixiert meine Krücke mit der staging-spalte aufzulösen, dass mir garnicht aufgefallen ist, dass ich das ganze mit meiner Funktion schon vom ersten Augenblick an umgehen kann.

 

Vielen Dank!

Geschrieben

Jup - früher als ich sowas noch öfter gemacht habe, hatte ich auch immer jemand im office der einem durch kurzes über die Schulter schauen bei der Lösung solcher nicht vorhandenen Probleme geholfen hat...

 

@Umsetzung. Done! :jau:

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...