Update vom Temp-Tabelle
Abfrage:
SELECT ID, T.c.value('@Address', 'nvarchar(20)' ) as Address
INTO #TMP
FROM TABLE1
CROSS APPLY XMLData.nodes('/Document') AS T(c)
UPDATE TABLE1
SET HomeAddress = (SELECT TOP 1 t.Address
FROM #TMP t
WHERE t.ID = ID)
Hauptsächlich brauche ich zum kopieren von Daten aus einem XML-Feld zu normalen Feldern in derselben Tabelle.
Fragen:
- Irgendeinen Grund, warum alle Datensätze bekommen, die HomeAddress auf Tabelle1?
- Ist wirklich Cursor der einzige Weg, um den Wert zu aktualisieren auf Tabelle1?
- mögliche Duplikate von Update einer Tabelle mit JOIN im SQL-Server?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie eine Verknüpfung. Keine Notwendigkeit, temp-Tabelle oder eine korrelierte Unterabfrage.
Wenn die Tabelle 1 ist in ein eins-zu-viele relationshisp dies sind einige posibilites für die Behandlung. Wenn Sie havea Wert, der angibt, nur einen Datensatz (wir haben ein Feld in unser system wählt die wichtigste Adresse, es ist gepflegt mit einem trigger zu garantieren uniquesness), die versuchen, diese:
Wenn Sie brauchen, um auf der Basis der einzigartigen Rekord auf asome andere Feld (wie die meisten neueren Datums), dann versuchen Sie, eine variation dieses:
Auf das update, muss ich VOLL QUALIFIZIEREN sich die Tabelle wie folgt:
UPDATE TABLE1
SET TABELLE1.HomeAddress = (SELECT TOP 1 t.Adresse
AUS #TMP t
WO t.ID = TABLE1.ID)
-- Beachten Sie, dass das 'GO' sind wichtig für die Erhaltung der Kontext in der SQL Server-2017, sonst finden Sie eine
"unknown field name' - Fehler.