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()
的情况下完成-至少我认为是这样。。。我的建议是:这个问题有一些答案。如果他们解决了这个问题,请接受你最喜欢的,并使用你的投票权。然后提出一个新问题,提供更多信息,说明你真正想要达到的目标。这听起来像是一个错误