如何插入包含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>
这是数据类型
答案 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;
如果这足以回答您的问题,请随时告诉我。如果需要,我可以提供更具体的帮助。