【问题标题】:How can i insert into MSSQL text Datatype field as xml我如何将 MSSQL 文本数据类型字段作为 xml 插入
【发布时间】:2016-07-28 18:34:29
【问题描述】:

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

我可以在我的一个使用 MSSQL 作为后端的应用程序中创建自定义字段。当我创建这些自定义字段时,都转到名为MIITEM 的表中的一个名为fldxml 的字段。我想编写插入和更新语句,但我不知道如何将记录插入到 <field></field> 之间的 fldxml 字段中

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

这里是数据类型

【问题讨论】:

  • 不要使用文本数据类型。十多年来,它已被弃用,取而代之的是 varchar(max)。文本数据类型非常难以使用。对于手头的问题,我不明白您要做什么,并且您发布的示例“xml”不是有效的 xml。

标签: sql-server xml tsql


【解决方案1】:

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

无论数据类型如何,您都可以使用 TSQL XML DML 功能在 TSQL 中修改 XML。这使得编写 DML 语句(如 INSERT、MODIFY、DELETE)来修改 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;  

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多