Sql Xquery-so Ersetzen Sie text in Update Abfrage
Tabelle ist benannt als MasterTable
Spalten
ID
Typ BIGINT
,
Name
Typ VARCHAR(200)
(speichert xml
geben die Daten aus einigen Gründen)
Name
enthält Daten strukturiert
<en-US>SomeEnglishText</en-US><it-IT>SomeItalicText</it-IT>
Wenn ich Update
die Master
Tabelle dann an, die Zeit, die ich Brauche zu werfen Varchar
zu xml
dann bedingt aktualisieren /ersetzen die value
Teil der besonderen tag ich.e entweder en-US /it-IT
.
Auch gibt es Chancen, dass Keine Daten/tags gibt es in Name
Spalte, also denke ich, dass die Zeit, die zum Einfügen von Daten es würde Insert
leere tag-Elemente in der Tabelle wie <en-US></en-US><it-IT></it-IT>
, so die update
Abfrage muss Griff leeren Wert in tag-Elemente nämlich en-US/it-IT
.
Ich versuche, es zu tun, wie folgende update-Abfrage.
DECLARE @Str VARCHAR(200)
SET @Str = 'Test Text'
UPDATE [MasterTable]
SET [Name] = cast([MasterTable].[Name] as xml).modify('replace value of (en-US/text())[1] with sql:variable("@Str")')
WHERE [ID]=18
Bekomme ich folgende Fehlermeldung beim ausführen der Abfrage
Rechtswidrige Verwendung der xml-datentypmethode 'ändern'. Ein non-mutator-Methode wird erwartet, dass in diesem Zusammenhang.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht berechtigt, aus einer xml.ändern. Ändern funktioniert auf die variable/Spalte direkt. Sie können auch nicht ändern, auf eine Besetzung.
Können Sie extrahieren Sie die Namen in eine xml-variable, ändern Sie den xml-Code und setzen Sie ihn dann wieder an den Tisch.
Wenn Sie diese arbeiten über mehr als eine Zeile in einer Zeit, die Sie verwenden können, um eine table-variable mit Spalten
id
undname
wo Datentyp name istxml
statt der@xml
variable.declare @str varchar(200) = 'Test'
zudeclare @str varchar(200) set @str = 'Test'
und es hat funktioniert.. vielen DankCOALESCE(@Name, Name)
und jetzt will ich es geändert, alsUPDATE MasterTable set Name = Name.modify('replace value of (en-US/text())[1] with sql:variable("@Str")') where ID = 18
wie Weise ich.e-handle Null in @StrName
Spalte istVARCHAR(200)
also ich bin vor problem direkt aufrufenmodify
auf es@xml
variable also, wenn Wir haben mit mehreren Spalten alsName
auf die wir aktualisieren möchten, dann würden wir erklären müssen mehrere@xml
Variablen zu aktualisieren mehrerer Spalten Sprache, das ist nicht gut, denke ich...