Frage

Ich habe meinen Kopf gegen das schon zu schlagen, und ich bin sicher, ich bin nur fehlt etwas offensichtlich, aber ...

ich in einer Kundendatenbank eine Tabelle haben, das ist im Grunde:

Item_Set_Key int
Item_1       bit
Notes_1      nvarchar(80)
Item_2       bit
Notes_2      nvarchar(80)
Item_3       bit
Notes_3      nvarchar(80)
...

Da ist 99 Elemente in jedem Datensatz, und nicht das Schema zu ändern, ist keine Option (andere externe Überlegungen einbezogen).

Um jedoch um es anzuzeigen in etwas aus der Ferne ähnelt Intelligenz an den Benutzer, müssen wir es UNPIVOT (über eine View) wie folgt aus:

SELECT i.Item_Set_Key, i.Item_Number, i.Selected, i.Item, i2.Notes, i2.Note
FROM (
SELECT Item_Set_Key, SUBSTRING (Item, 6, 2) AS Item_Number, Selected, Item
    FROM Item_Set
    UNPIVOT (Selected FOR Item IN
        (Item_1, Item_2, Item_3, Item_4, Item_5, ...)
    ) as u
) AS i
LEFT JOIN (
SELECT Item_Set_Key, SUBSTRING (Note, 7, 2) AS Item_Number, Notes
    FROM Item_Set
    UNPIVOT (Notes FOR Note IN
        (Notes_1, Notes_2, Notes_3, Notes_4, Notes_5, ...)
    ) as n
) AS i2 ON i2.Item_Set_Key = i.Item_Set_Key
    AND i2.Item_Number = i.Item_Number

ich tun, um die Standard-bind davon an das Netz. Allerdings bin ich etwas ratlos, wie die Update für ihn zu bauen, weil der Text explizit im SET, aber die Spaltennamen sind die Spalte zu nennen in den Artikel und Hinweis Spalten dynamisch haben würde, und ich kann ‚t nur alle Spalten festgelegt, da jeder Datensatz nur Daten für ein Element / notes Paar hat.

Ideen?

War es hilfreich?

Lösung

Sie werden nicht in der Lage sein, verlassen sich auf Datenbindung die Änderungen in die Datenbank zurück in der ursprünglichen geschwenkt Tabelle zu senden. Stattdessen müssen Sie jedes Update als eine einzige erfassen „Arbeitseinheit“. Zum Beispiel Artikel-ID = 92, value = "Tom". Vielleicht vorher Wert Artikel 92 Jahren war „Joe“. Ihre Arbeitseinheit hier ist der Wert für die Position zu ändern 92.

Wenn der Benutzer Änderungen über die Benutzeroberfläche macht können Sie Batch zusammen jede UOW und halten Sie sich an sie, bis sie bereit sind, speichern zu klicken. Wenn der Benutzer für das fragt speichern, die jeweils erfassten UOW wird „gespielt“ gegen die Datenbank. Suchen um für die „Befehl“ Muster und / oder einige von Jeremy Miller Artikel.

Ein weiterer Gedanke ist, dass Sie sagen, Sie nicht das Schema ändern können, aber vielleicht kann man wirklich. Betrachten wir eine reale Tabelle erstellen, die in der nicht verschwenkten Format ist. Dann ersetzen Sie die aktuelle Tabelle mit einer Ansicht, die den PIVOT Befehl verwendet. In der Tat speichern Sie die Daten in einem besseren Design, sondern für die bestehende Anwendung Sie es zurück verschwenken. Dies könnte funktionieren, wenn Sie Updates tun müssen, während es in dem verschwenkten Design ist.

Letzte Option ist man einfach zwei Tabellen physische halten konnte und dann einige komplexe Zusammenführung schreibt sie in regelmäßigen Abständen zu synchronisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top