标签: xml-dml

TSQL 2005,XML DML - 一次更新两个值?

有没有办法将这两个替换值与1个更新语句组合在一起?

UPDATE dbo.MyTable
SET MyXmlColumn.modify('replace value of (/node/@att1)[1] with "1"')
WHERE id = 1

UPDATE dbo.MyTable
SET MyXmlColumn.modify('replace value of (/node/@att2)[1] with "2"')
WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-US/library/ms190675(v=SQL.90).aspx

xml t-sql sql-server-2005 xml-dml dml

8
推荐指数
1
解决办法
2450
查看次数

如何从sql server 2008中的XML变量中删除属性?

我有一个名为XML的表(在SQL Server 2008中),它有一个名为XmlDocumenttype 的字段XML.我试图从XML变量中删除属性.

这是我的xml的样子

<clue_personal_auto xmlns="http://cp.com/rules/client">
  <admin>
     <receipt_date>03/16/2011</receipt_date>
     <date_request_ordered>03/16/2011</date_request_ordered>
     <report_usage>Personal</report_usage>
  </admin>
</clue_personal_auto>
Run Code Online (Sandbox Code Playgroud)

我的查询

UPDATE XML
SET XmlDocument.modify('delete  (/clue_personal_auto/@xmlns)[1]')
 WHERE xmlid = 357
Run Code Online (Sandbox Code Playgroud)

当我在查询分析器中运行此查询时,我看到消息"1行受影响",但实际上clue_personal_auto元素的xmlns属性未被删除.知道我做错了什么.

谢谢BB

xml sql xml-dml sql-server-2008

6
推荐指数
3
解决办法
1万
查看次数

在SQL 2005中使用XML.modify()在多个XML节点中插入属性

我有一个从单个select语句创建的@XML文档。

<root>
 <node>
  <node1>
   <targetNode>
   </targetNode>
  </node1>
  <node1>
   <targetNode>
   </targetNode>
  </node1>
  <node1>
   <targetNode>
   </targetNode>
  </node1>
 </node>
 <node>
  ......
 </node>
</root>
Run Code Online (Sandbox Code Playgroud)

我想将xsi:nil插入此文档的'targetNode'属性。

@XML.modify( 'insert attribute xsi:nil {"true"} into (root/node/node1/targetNode) [1]') 
Run Code Online (Sandbox Code Playgroud)

上面的代码会将属性插入@XML文档中targetNode的第一次出现。但是,insert语句仅在单个节点上起作用。有什么方法可以将此属性插入@XML文档中的targetNode的所有实例中。

xml sql-server sql-server-2005 xml-dml

5
推荐指数
2
解决办法
6742
查看次数

如何防止XML-DML修改函数向插入节点添加空名称空间

所以基本上我有一个脚本,根据这个节点是否存在更新XML.这是t-sql

DECLARE @newJob XML
SET @newJob = N'<job>
    <job-detail>
      <name>job-name</name>
    </job-detail>
  </job>'

;WITH XMLNAMESPACES(DEFAULT 'http://quartznet.sourceforge.net/JobSchedulingData')
UPDATE XmlTable
SET ConfigXml.modify('
insert sql:variable("@newJob") 
as last into (/quartz)[1]')
WHERE ConfigXml.exist(N'//quartz/job/job-detail/name[.="job-name"]') = 0
Run Code Online (Sandbox Code Playgroud)

现在一切都按预期工作,只是插入的节点现在包含这样的空命名空间

<job xmlns="">
Run Code Online (Sandbox Code Playgroud)

如果我删除

;WITH XMLNAMESPACES(DEFAULT 'http://quartznet.sourceforge.net/JobSchedulingData')
Run Code Online (Sandbox Code Playgroud)

查询停止执行.我认为这是因为我的根节点定义了名称空间

<quartz xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" overwrite-existing-jobs="true">
Run Code Online (Sandbox Code Playgroud)

所以我的问题是 - 有没有办法阻止这个名称空间添加到正在插入的节点?

t-sql xml-dml sql-server-2008

5
推荐指数
1
解决办法
824
查看次数

错误:'replace value of' 的目标必须是非元数据属性或具有简单类型内容的元素

我有以下 xml 字段,我需要在其中替换节点之一的值:

<DataFormItem xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="bb_appfx_dataforms">
  <Values>
    <fv ID="FUNDRAISERID">
      <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">1009fb5a-41a0-40c1-8685-d5973fb71df7</Value>
      <ValueTranslation>John Smith</ValueTranslation>
    </fv>
    <fv ID="STARTDATE">
      <Value xsi:type="xsd:dateTime">2015-01-01T00:00:00</Value>
    </fv>
  </Values>
</DataFormItem>
Run Code Online (Sandbox Code Playgroud)

我需要将 STARTDATE 值“2015-01-01T00:00:00”更改为“2016-01-01T00:00:00”。为此,我编写了以下查询:

update KPIINSTANCE
SET     NAME = '2016 ' + SUBSTRING(k.name, 6,150), 
        PARAMETERSXML.modify('
        declare namespace df = "bb_appfx_dataforms";
        replace value of (/df:DataFormItem/df:Values/df:STARTDATE/df:Value)[1] with "2016-01-01T00:00:00" cast as xs:dateTime ?')
FROM KPIINSTANCE K
        JOIN KPICATALOG KP ON KP.ID = K.KPICATALOGID
where k.ID = '43C6DA6B-420A-4D4E-BA31-84C8054B4AB6'
Run Code Online (Sandbox Code Playgroud)

据我所知,这是正确的,但是当我尝试运行查询时,出现错误:XQuery [KPIINSTANCE.PARAMETERSXML.modify()]: The target of 'replace value of' must be a non-metadata属性或具有简单类型内容的元素,找到 'element(df{bb_appfx_dataforms}:Value,xdt:untyped) ?' …

xml t-sql xml-dml dml

4
推荐指数
1
解决办法
5423
查看次数

Tath SQL更新架构中的XPath

在我的表中,我有一个包含XML数据的列.

例如,假设架构如下:

<person>
  <id></id>
  <name></name>
</person>
Run Code Online (Sandbox Code Playgroud)

问题是这些节点中的一些节点有额外的节点 <lastname>

现在,我想更新此列中的所有元素,以便每个元素都lastname具有默认值的节点smith.

sql t-sql xquery sql-server-2005 xml-dml

3
推荐指数
1
解决办法
1180
查看次数

如何使用T-SQL内置函数中的值更新XML列?

我有一个MS SQL 2008 R2标准数据库.我有一个包含varchar(250)数据和列的列xml.

CREATE TABLE [dbo].[art](
[id] [int] IDENTITY(1,1) NOT NULL,
[idstr] [varchar](250) NULL,
[rest] [xml] NOT NULL,
    CONSTRAINT [PK_art] PRIMARY KEY CLUSTERED ([id] ASC)
)
Run Code Online (Sandbox Code Playgroud)

问题是我想在大约140条记录中将字符串函数的结果插入到xml中.我试过xml.modify用动态生成的文本.

UPDATE [pwi_new].[dbo].[art]
SET rest.modify('insert <e><k>link</k><v>' 
      + my_string_function(idstr) + '</v></e> into (/root)[1]')
  WHERE parent = 160
  AND idstr LIKE '%&%'
GO
Run Code Online (Sandbox Code Playgroud)

但是,我有这个错误:

The argument 1 of the XML data type method "modify" must be a string literal.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我想避免使用时态字段,外部语言和从生成的字符串执行TSQL?(我听说过的sql:variablesql:column,但是这是TSQL函数的结果.)

xml t-sql sql-server xml-dml sql-server-2008-r2

2
推荐指数
1
解决办法
1万
查看次数

使用XML-DML从SQL查询编辑XML

我的MSSQL数据库中有一个XML列,其架构类似于:

<Form>
   <Version>1000</Version>
   <OtherValues />
</Form>
Run Code Online (Sandbox Code Playgroud)

我需要手动将所有行的Version数字(通过脚本)更改为1001.在搜索时,我可以推断出我将使用.modifyXPath函数,但我发现的所有示例都是用于插入节点,而不是编辑它们.

有人可以说明如何做到这一点吗?

xml sql-server xml-dml

1
推荐指数
1
解决办法
677
查看次数