nerd 28 Geschrieben 1. Juli 2009 Melden Teilen Geschrieben 1. Juli 2009 Hi, ich habe hier eine MS SQL 2005 Datenbank. Ich muß nun die Daten einer Spalte (varchar) in eine andere Tabelle kopieren (image). Geht das technisch (am besten direkt in SQL)? Viele Grüße Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 1. Juli 2009 Melden Teilen Geschrieben 1. Juli 2009 Moin, wo genau ist das Problem? Fehlt dir die SQL-Syntax dazu? Über welche Anzahl an Reihen reden wir? Ist komplexere Logik für die Zuordnung nötig, oder ist es eher ein simples Kopieren? Gruß, Nils Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 1. Juli 2009 Autor Melden Teilen Geschrieben 1. Juli 2009 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 1The 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. Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 2. Juli 2009 Melden Teilen Geschrieben 2. Juli 2009 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 Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 2. Juli 2009 Autor Melden Teilen Geschrieben 2. Juli 2009 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 Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 2. Juli 2009 Melden Teilen Geschrieben 2. Juli 2009 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 Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 2. Juli 2009 Autor Melden Teilen Geschrieben 2. Juli 2009 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... Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 2. Juli 2009 Autor Melden Teilen Geschrieben 2. Juli 2009 ... 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? Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 2. Juli 2009 Melden Teilen Geschrieben 2. Juli 2009 Spontane Idee: Bastel dir noch nen Cursor und ordne dir die Daten damit sauber zu. Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 2. Juli 2009 Autor Melden Teilen Geschrieben 2. Juli 2009 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 Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 2. Juli 2009 Melden Teilen Geschrieben 2. Juli 2009 Dann sollte doch das Statement von Nils gehen, mit Ergänzung deiner SP oder? INSERT Zieltabelle (ID, Daten) SELECT idData, tdText FROM Ausgangstabelle WHERE Filter Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 2. Juli 2009 Autor Melden Teilen Geschrieben 2. Juli 2009 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! Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 2. Juli 2009 Melden Teilen Geschrieben 2. Juli 2009 Manchmal reicht es eben wenn man mal drüber spricht. :-) Viel Spaß bei der Umsetzung. Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 2. Juli 2009 Autor Melden Teilen Geschrieben 2. Juli 2009 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: Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 2. Juli 2009 Melden Teilen Geschrieben 2. Juli 2009 :) freut mich, dass es nun gelöst ist! Schöne Grüße, Nils Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.