在特定节点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.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

我正在通过循环生成xmlat @xml,我想在

之后插入它

我尝试了 SET @MasterXML.modify(' insert sql:variable("@xml") as last into (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查询中指定。

使用xmlnamespaces

将命名空间添加到查询中

您的xpath表达式无效。尝试这样的事情:

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

最新更新