SQL Tabellenspalte kopieren

Waterfreak

Grünschnabel
Hallo Gemeinde,
ich bin neu hier und brauche Hilfe in SQL.
Es geht darum einen recht langen Langbeschreibungstext in einer bestimmte Spalte einer anderen Datenbank zu kopieren.
Das ursprüngliche Problem besteht darin, dass ich in unseren Warenwirtschaftdatenbank vor einiger Zeit Artikellangbeschreibungen über das WaWi in die SQL Datenbank importiert habe.
Diese Artikelbeschreibungen liefen vorher durch einige Access Abfragen und wurden unwissend der Folgen gruppiert, somit sind alle beschreibungen ab 255 Zeichen abgeschnitten.
Nun will ich dieses Problem beheben und habe in einer neuen Testdatenbank bereits die alten und die neuen Artikelbeschreibungen in einer Tabelle stehen.
Da bei einigen Artikeln eine Artikelbeschreibung "ALT" vorhanden ist, und KEINE Artikelbeschreibung "NEU", muss ich in der Spalte mit den neuen Artikelbeschreibungen die Datensätze, welche keine neue Beschreibung aber eine alte in einer andere Spalte der selben Tabelle haben, ersetzen bzw. ergänzen.
Meine Vorgehensweise war bislang wie folgt:

UPDATE [IngoTestDB].[dbo].[Abfrage1]
SET [LangbeschreibungALT] = [LangbeschreibungNEU]
WHERE [LangbeschreibungNEU] = 'NULL'

Dies funktioniert nur begrenzt, ein paar Beschreibungen werden wie gewünscht ergänzt, aber bei Weitem nicht alle.

Dann habe ich mir gedacht, da in der Tabelle einige Datensätze NULL und einige nichts enthalten, dass ich alle mit NULL durch nichts ersetze (REPLACE(LangbeschreibungNEU,'NULL','')).
Funktioniert auch nicht richtig, ein paar werden ersetzt aber auch nicht alle.
Als eindeutiges Merkmal eines Datensatzes könnte man die Artikelnummer gebrauchen, habe ich bisher nicht berücksichtigt, weiss auch nicht ob es überhaupt nötig ist.
Da ich ein SQL Anfänger bin, erreiche ich nun meine Grenze und brauche Hilfe.

Wenn dieses Problem gelöst ist, müsste die Spalte mit den neuen Artikelbeschreibungen die Spalte der Artikeltabelle in der WaWi-Datenbank ersetzen.

Ich hoffe das Problem einigermassen verständlich dargestellt zu haben und hoffe auf Hilfe, für die ich mich schon jetzt bedanke.

mfg
Ingo
 
Hallo,

das ist vermutlich MS SQL Server? Im gegebenen Fall würde ich versuchen, erst mal zu ermitteln, welche Fälle für die unbrauchbare [LangbeschreibungNEU], die ersetzt werden soll, vorliegen. Das könnte man über eine Query wie die folgende ermitteln:
Code:
select [LangbeschreibungNEU], count(*)
  from [IngoTestDB].[dbo].[Abfrage1]
 where len([LangbeschreibungNEU]) >= 1
 group by [LangbeschreibungNEU]
Die Query liefert alle Strings für [LangbeschreibungNEU], deren Länge <= 1 ist, was (vermutlich?) keine sinnvollen Langbeschreibungen sind. Anschließend könnte man alle Fälle, die man über diese Query ermittelt hat, in der WHERE-clause des Updates über OR verknüpfen, also etwa:
Code:
UPDATE [IngoTestDB].[dbo].[Abfrage1]
SET [LangbeschreibungALT] = [LangbeschreibungNEU]
WHERE [LangbeschreibungNEU] = 'NULL' OR [LangbeschreibungNEU] ='' OR [LangbeschreibungNEU] IS NULL OR ... was auch immer
Beim Aufschreiben ist mir erst aufgefallen, dass hier 'NULL' als String-Wert verglichen wird - für einen Vergleich mit dem logischen Zustand NULL bräuchte man wohl auch beim SQL Server ein IS NULL.

Gruß

MP
 
Hallo MP,
vielen Dank für Deine Antwort, hat mit sehr geholfen, allerdings musste ich den Datentyp den Zielspalte von ntext in nvarchar konvertieren, hat aber dann Prima geklappt.
 
Zurück