2016-07-28 7 views
-2

Wie kann ich in TSQL-Textfeld mit Xml einfügen.Wie kann ich in MSSQL-Text Datatype-Feld als xml einfügen

Ich kann benutzerdefinierte Felder in einer meiner Anwendung erstellen, die MSSQL als Back-End verwendet. Wenn ich diese benutzerdefinierten Felder erstelle, gehen alle zu einem einzelnen Feld namens fldxml in einer Tabelle mit dem Namen MIITEM. Ich möchte Insert und Update-Anweisung schreiben, aber ich weiß nicht, wie Datensatz in fldxml Feld einfügen zwischen <field></field>

<field1></field1> is custFld1(Custom Field1) 
<field2></field2> is custFld2(Custom Field2) 
<field3></field3> is custFld3(Custom Field3) 
<field4></field4> is custFld4(Custom Field4) 

hier ist, wie die Daten wie auf dem Gebiet

<fields><field3>PFB652S6</field3><field1></field1><field2></field2><field4></field4></fields> 

enter image description here

sieht

hier ist der Typ Daten

enter image description here

+2

Verwenden Sie nicht den Textdatentyp. Es ist seit mehr als einem Jahrzehnt für varchar (max) veraltet. Es ist unglaublich schwierig, mit dem Text-Datentyp zu arbeiten. Für die vorliegende Frage verstehe ich nicht, was Sie zu tun versuchen, und das Beispiel "xml", das Sie gepostet haben, ist kein gültiges xml. –

Antwort

0

In der Tat sollten Sie den TEXT-Datentyp nicht verwenden. Verwenden Sie stattdessen XML.

Unabhängig vom Datentyp können Sie XML in TSQL mithilfe der TSQL XML DML-Funktionalität ändern. Dies macht es möglich, DML-Anweisungen wie INSERT, MODIFY, DELETE zu schreiben, um XML-Dokumente zu modifizieren.

Unten ist ein Beispiel dieses auf Ihrem Dokument demonstriert:

-- First declare a variable of type XML 
DECLARE @fields xml; 

-- Here are the values we will be manipulating 
DECLARE @nodeToReplace VARCHAR(MAX),@newValue VARCHAR(MAX) 
SET @nodeToReplace = 'field3' 
SET @newValue = 'PFB652S6' 

-- Then fetch the value from the database. Insert the correct where clause 
SELECT @fields=CAST(fldxml AS XML) FROM MIITEM WHERE ..... 

-- Now @fieds will contain your XML 
SELECT @fields AS OldValue; 

-- When the value of the node is empty, you have to insert the text node as follows. 
SET @fields.modify(' 
    insert text {sql:variable("@newValue")} as last into (/fields/*[ local-name()=sql:variable("@nodeToReplace") ])[1] 
'); 
SELECT @fields AS NewInsertedValue; 

-- When the value is present already, a slightly different syntax must be used to update it 
SET @newValue = 'BLABLA' 
SET @fields.modify(' 
    replace value of (/fields/*[local-name()=sql:variable("@nodeToReplace")][1]/text())[1] 
    with  sql:variable("@newValue") 
'); 
SELECT @fields AS NewUpdatedValue; 

Fühlen Sie sich frei, mich zu informieren, wenn diese ausreichend beantwortet Ihre Fragen. Ich könnte bei Bedarf eine spezifischere Hilfe anbieten.