SQL Server列中的字符串的UPDATE值

时间:2016-11-18 09:40:45

标签: sql sql-server varbinary

我在表PERSON中有一个名为PROPERTYDATA的VARCHAR列,其中包含类似这样的数据

    <java.lang.String valueOf="ALLOWUSER" />
    <java.lang.String valueOf="true" />
    <java.lang.String valueOf="STATUSTASK" />
    <java.lang.String
        valueOf="${param.TaskOpen eq true ? true : &apos;&apos;" />
    <java.lang.String valueOf="PROPERTYCOLOR" />
    <java.lang.String valueOf="1" />

这实际上显示了在系统中创建的字段,其值低于它,例如变量名称ALLOWUSER的值为true。

STATUSTASK的值总是$ {param.TaskOpen eq true?真的......

我想写两个查询

  1. 更新查询,将字段STATUSTASK的值更新为空,即&#34;&#34;每个行中的PROPERTYCOLOR值为1。如果ROW数据的PROPERTYCOLOR不是1,那么我们应该保持原样。
  2. 所以结果将是

        <java.lang.String valueOf="ALLOWUSER" />
        <java.lang.String valueOf="true" />
        <java.lang.String valueOf="STATUSTASK" />
        <java.lang.String
            valueOf="" />
        <java.lang.String valueOf="PROPERTYCOLOR" />
        <java.lang.String valueOf="1" />
    
    1. 删除字段名称和值WHERE PROPERTYCOLOR值为1,即在查询后该行现在应该是

      <java.lang.String valueOf="ALLOWUSER" />
      <java.lang.String valueOf="true" />
      <java.lang.String valueOf="PROPERTYCOLOR" />
      <java.lang.String valueOf="1" />
      
    2. 我们应该这样做吗?

      UPDATE PERSON SET PROPERTYDATA =(SUBSTRING(PROPERTYDATA))...我被卡住了,请帮忙

      谢谢,

      艾登

1 个答案:

答案 0 :(得分:1)

我没有答案可以这么说,但我已经看过这个并设法写了一些转换为XML并查询数据的查询,这可能会帮助你找到答案。最终的解决方案,所以我发布了我已经完成的工作:

CREATE TABLE #temp
    (
      propertydata VARBINARY(MAX) ,
      propertyxml XML
    )

INSERT  INTO #temp
        ( propertydata ,
          propertyxml
        )
VALUES  ( CAST(' <java.lang.String valueOf="ALLOWUSER" />
    <java.lang.String valueOf="true" />
    <java.lang.String valueOf="STATUSTASK" />
    <java.lang.String
        valueOf="${param.TaskOpen eq true ? true : &apos;&apos;" />
    <java.lang.String valueOf="PROPERTYCOLOR" />
    <java.lang.String valueOf="1" />' AS VARBINARY(MAX)) ,
          CAST(' <java.lang.String valueOf="ALLOWUSER" />
    <java.lang.String valueOf="true" />
    <java.lang.String valueOf="STATUSTASK" />
    <java.lang.String
        valueOf="${param.TaskOpen eq true ? true : &apos;&apos;" />
    <java.lang.String valueOf="PROPERTYCOLOR" />
    <java.lang.String valueOf="1" />' AS XML)
        )

SELECT  propertydata ,
        propertyxml
FROM    #temp

SELECT  t2.Loc.query('.') XmlRow ,
        t2.Loc.query('.').value('(/java.lang.String/@valueOf)[1]',
                                'nvarchar(100)') AS AttributeValue
FROM    #temp
        CROSS APPLY propertyxml.nodes('java.lang.String') AS t2 ( loc )
WHERE   t2.Loc.query('.').value('(/java.lang.String/@valueOf)[1]',
                                'nvarchar(100)') IS NOT NULL

DROP TABLE #temp

<强>产地:

XmlRow                                                       AttributeValue
<java.lang.String valueOf="ALLOWUSER" />                     ALLOWUSER
<java.lang.String valueOf="true" />                          true
<java.lang.String valueOf="STATUSTASK" />                    STATUSTASK
<java.lang.String valueOf="${param.... />                     ${param....
<java.lang.String valueOf="PROPERTYCOLOR" />                 PROPERTYCOLOR
<java.lang.String valueOf="1" />                             1