MS SQL2005 binäres (blob) Feld auf "NULL" setzen.

Hallo ich habe eine Frage.

Folgendes hat sich zugetragen:

Per update statement habe ich bei einem binärem Feld dessen inhalt NULL war den Inhalt auf “a” geändert.

Nun möchte ich den INhalt wieder auf NULL zurücksetzen, aber es scheint da ein Problem mit dem gleichheitszeichen und dem binären feld setzen.

Mein statement sieht momentan so aus:

update tabelle
set FELD = null
where Feld = ‘a’

das Problem scheint beim 2ten = zu liegen.

Was kann ich da tuen?

Du hast Dich verirrt, hier geht es um PostgreSQL, nicht um M$-SQL.

Nun möchte ich den INhalt wieder auf NULL zurücksetzen, aber es scheint da ein Problem mit dem gleichheitszeichen und dem binären feld setzen.

Mein statement sieht momentan so aus:

update tabelle
set FELD = null
where Feld = ‘a’

das Problem scheint beim 2ten = zu liegen.

Was kann ich da tuen?

Zu PostgreSQL wechseln:

test=# create table this_is_not_mssql (a text, b int);
CREATE TABLE
Zeit: 262,935 ms
test=*# insert into this_is_not_mssql values ('a', 1);
INSERT 0 1
Zeit: 0,418 ms
test=*# UPDATE this_is_not_mssql set b = null where a = 'a';
UPDATE 1
Zeit: 73,613 ms
test=*# select * from this_is_not_mssql;
 a | b
---+---
 a |
(1 Zeile)

Zeit: 0,294 ms

Andreas

Mal ne Fehlermeldung posten !?

die Fehlermeldung lautet
Die Datentypen image und varchar sind im equal to-Operator inkompatibel

leider kann ich mit PostgreSQL
irgednwie gerade nichts anfangen, sollte ich hier an der falschen Stelle sein, tut es mir leid, ich hatte bei google einfach nach “SQL Forum” geschaut.

vergiss das mit postgres - da wuerdest du einen aehnlichen fehler bekommen, ganz einfach weil du das blob zunaechst in einen text convertieren musst und diesen dann vergleichen …

wenn dein obiges beispiel deiner wirklichkeit entspricht koenntest du aber auch einfach das erste element des blobs (ist das ein array ?) mit dem zeichen vergleichen …

ich weiss nicht einmal was ein array genau ist, sorry

ich habe schonmal versucht mit “cast” das ganze irgendiwe umzuwandeln, aber das ging nicht.

Ich bin aber gerne bereit, das ganze in ein textfeld zu konvertieren.

Und da das Beispiel in der tat der Wirklichkeit entsprich,t können wir gerne das erste element des blobs mit dem Zeichen vergleichen.

Du müsstest mir nur sagen “wie”

hmm … blutiger anfaenger? :slight_smile:

Array – Wikipedia, die freie Enzyklopädie

aber ist hier nich so sehr relevant


probiere mal
WHERE CONVERT(varchar( 1 ), blob)) = ‘A’

das funktioniert aber nur, wenn er hoffentlich keinen fehler bringt, nur weil das blob laenger ist als 1 zeichen ist …
ich spekuliere mal, dass das funktioniert …

sorry wenn ich etwas nervig bin, aber i ch wollte nochmal genau nachfragen:

meine abfrage sieht momentan so aus



update dokument
set dok_inhalt = null
WHERE CONVERT(varchar( 1 ), blob)) = ‘A’



wo muss ich hier in der 3ten zeile den spaltennamen dok_inhalt hinschreiben,

und was passiert dann genau


“convert” hört sich so nach Veränderung an, passiert da irgednwas schlimmes mit den Spalten ?

funktioniert sie denn? hosch’s ausprobiert ? eigentlich muss da, wo blob steht der feld-name des blob-feldes …

na nirgends - in der 3. Zeile steht WHERE - also eine Bedingung welche Datensaetze von der Änderung betroffen sein sollen. Natuerlich kann die Bedingung auch komplexer werden - z.B.

WHERE CONVERT(varchar( 1 ), blob)) = ‘A’
AND dok_inhalt = …


convert ist eine Funktion - was die macht kannst du dir sicher in der MSDN anschauen (gibts im web bei microsoft - einfach mal danach suchen)

convert macht mit dem blob-feld selbst nichts - es hat als parameter dieses blob-feld - nimmt dessen daten und liefert als ergebnis ein varchar(1) Wert zurueck, weil das haben wir ja so gewollt siehe parameter 1 → varchar(1) … und diesen rueckgabe-wert - der dann hoffentlich das 1. Zeichen des blob-feldes darstellt koennen wir mit der Zeichenkette ‘A’ vergleichen … denn die beiden zu vgl. Werte sind nun vom gleichen / kompatiblen Typ

Wenn ich das eingebe:

update dokument
set dok_inhalt = null
WHERE CONVERT(varchar( 1 ), dok_inhalt)) = ‘a’

kommt das:

In der Nähe von ‘)’ wurde ein nicht boolescher Ausdruck in einem Kontext angegeben, in dem eine Bedingung erwartet wird.

zähl mal die klammer-auf und die klammer-zu

Du hast eine schliessende Klammer zuviel.

CU Uwe