ein Von der Benutzeroberfläche übergebe ich eine Datentabelle an eine gespeicherte Prozedur. Der Typ dieses Parameter ist ein frei wählbares Tabellenfeld mit der folgenden StrukturVerwenden Sie MERGE, um Daten zu löschen, oder geben Sie
Personkey int
ComponentKey varchar
Diese Daten in eine Tabelle gehen muss, und Daten, die in der Tabelle vorhanden ist, aber nicht in der Datentabelle soll gestrichen werden.
Beispiel Tabellendaten
PersonKey ComponentKey
123 A1
456 B9
Und meine Datentabelle hat 2 Zeilen, eine passende Zeile und eine neue Zeile
Beispiel Datentabelle Daten
PersonKey ComponentKey
123 A1
786 Z6
Das Ergebnis ist, dass die 456/B9 Zeile sollte gelöscht werden, nichts sollte mit der Zeile 123/A1 passieren, und die Zeile 786/Z6 sollte eingefügt werden.
Ich glaube, ich kann die MERGE-Anweisung verwenden, aber ich bin mir nicht sicher, wie man es formt.
Ich verstehe, dass, wenn nicht abgestimmt, ich den Einsatz tun sollte, aber wo kommt der Löschteil hinein?
MERGE Components
USING @passedInData
ON PersonKey = DatatblPersonKey AND ComponentKey = DatatblComponentKey
WHEN MATCHED THEN
-- DO nothing...
WHEN NOT MATCHED
INSERT (PersonKey, ComponentKey) VALUES (DatatblPersonKey, DatatblComponentey);
Edit: Nur klar zu sein, könnte die Datentabelle viele Zeilen für die gleiche Person Schlüssel enthalten, aber die Komponente Schlüssel anders sein würde.
Beispiel Datentabelle Daten
PersonKey ComponentKey
123 Z6
123 C5
Beispiel Tabellendaten
PersonKey ComponentKey
123 A1
456 B9
Das Ergebnis nach der obigen Datentabelle einfügen sollte
seinPersonKey ComponentKey
123 Z6
123 C5
456 B9
Beachten Sie, dass 123/A1 gelöscht und 456 wurde/B9 ist immer noch in der Tabelle.
ich meine Frage aktualisiert, da dieser Ansatz nicht funktioniert. – andrewb
Ihre Ausführung hat vielleicht nicht funktioniert, aber der Ansatz funktioniert. Ich habe meine Antwort bearbeitet, um die Konstrukte der Daten und die kodierte Lösung für Ihr Problem einzubeziehen. Achten Sie darauf, dass Sie darauf achten müssen, was genau Ihr Ziel ist. – btberry