我如何作为xml

时间:2016-07-28 18:34:29

标签: sql-server xml tsql

如何插入包含xml的TSQL文本字段。

我可以在我的一个应用程序中创建自定义字段,该字段使用MSSQL作为后端。当我创建这些自定义字段时,所有字段都会转到名为fldxml的表中名为MIITEM的单个字段中。我想编写插入和更新语句,但我不知道如何在fldxml

之间的<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)

这是数据在字段中的样子

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

enter image description here

这是数据类型

enter image description here

1 个答案:

答案 0 :(得分:0)

确实,您不应该使用TEXT数据类型。为此,请改用XML。

无论数据类型如何,您都可以使用TSQL XML DML功能在TSQL中修改XML。这样就可以编写像INSERT,MODIFY,DELETE这样的DML语句来修改XML文档。

以下是在您的文档中展示此内容的示例:

-- 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;  

如果这足以回答您的问题,请随时告诉我。如果需要,我可以提供更具体的帮助。