Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server的特定节点上插入Xml_Sql Server_Xml - Fatal编程技术网

Sql server 在SQL Server的特定节点上插入Xml

Sql server 在SQL Server的特定节点上插入Xml,sql-server,xml,Sql Server,Xml,我有以下代码 @MasterXML= ' <Report MustUnderstand="df" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:df="http://schemas.microsoft.co

我有以下代码

@MasterXML= '
    <Report MustUnderstand="df" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:df="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition/defaultfontfamily">
      <DataSets>
        <DataSet Name="'+@Datasetname+'">
          <Query>
          </Query>
          <Fields>
          <Field>
          </Field>
          </Fields>
        </DataSet>
      </DataSets>
      </Report> '
    WHILE @i <= @Cnt
    BEGIN

    Select @xml=
     (  
      SELECT  @cname AS [@Name]
               ,@cname AS [DataField]
               ,'System.String' AS [rd:TypeName]
        FOR XML PATH('Field')
    );
    SET @i = @i + 1
    SET @MasterXML.modify(' insert sql:variable("@xml") as last into  (Fields)[1] ' )  
    end
    select @MasterXML
@MasterXML='1!'
'

而@i您的xpath表达式无效。试着这样做:

SET @MasterXML.modify(' insert sql:variable("@xml") as last into  (/Report/DataSets/DataSet/Fields)[1] ' )  

@MasterXML
有一个默认名称空间
http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition
因此您需要使用该名称空间引用节点

set @MasterXML.modify('
  declare default element namespace "http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition";
  insert sql:variable("@xml") as last into  (/Report/DataSets/DataSet/Fields)[1]');
请注意,要添加到
@MasterXML
的XML中的元素不使用名称空间,因此您将为这些元素添加
xmlns=“”
。如果希望它们是同一名称空间的一部分,则必须在
for xml
查询中指定它们


你说的“字段不相加”是什么意思?@XML部分不相加到指定的节点。我很确定,这可以做得更好。。。您没有告诉我们,
@cname
来自何处,但这可以在没有任何循环或
.modify()
的情况下完成-至少我认为是这样。。。我的建议是:这个问题有一些答案。如果他们解决了这个问题,请接受你最喜欢的,并使用你的投票权。然后提出一个新问题,提供更多信息,说明你真正想要达到的目标。这听起来像是一个错误