我有以下代码,
@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] ' )
,但生成的字段没有加起来。
任何人都可以帮助我吗?
答案 0 :(得分: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
查询中指定它。
答案 1 :(得分:0)
您的xpath表达式无效。尝试这样的事情:
SET @MasterXML.modify(' insert sql:variable("@xml") as last into (/Report/DataSets/DataSet/Fields)[1] ' )