gpt4 book ai didi

xml - 如何在考虑 XML 命名空间的情况下替换 T-SQL 中的 XML 标记文本

转载 作者:行者123 更新时间:2023-12-04 16:54:32 25 4
gpt4 key购买 nike

我在 T-SQL 中有以下代码:

declare @x1 xml = '<ScheduleDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><StartDateTime xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer">2018-02-06T00:00:00.000+10:00</StartDateTime></ScheduleDefinition>'; 
select @x1 as [@x1];

declare @now datetime = {d'2018-02-07'};
set @x1.modify('replace value of (/ScheduleDefinition/StartDateTime/text())[1] with sql:variable("@now")');
select @x1 as [@x1];

它不会替换日期时间值。据我了解,这两个标签的命名空间是这个问题的原因。
如果我删除命名空间一切正常。

即使在 XML 中提到了命名空间,是否也可以替换标签文本?

最佳答案

这应该有效:

declare @x1 xml = '<ScheduleDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><StartDateTime xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer">2018-02-06T00:00:00.000+10:00</StartDateTime></ScheduleDefinition>'; 
select @x1 as [@x1];

declare @now datetime = {d'2018-02-07'};
set @x1.modify('declare namespace NS = "http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer"; replace value of (/ScheduleDefinition/NS:StartDateTime/text())[1] with sql:variable("@now")');
select @x1 as [@x1];

我们只需要声明命名空间,然后在我们需要的地方使用它。

前:
<ScheduleDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<StartDateTime xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer">2018-02-06T00:00:00.000+10:00</StartDateTime>
</ScheduleDefinition>

后:
<ScheduleDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<StartDateTime xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer">2018-02-07T00:00:00.000</StartDateTime>
</ScheduleDefinition>

此外,您可以查看有关处理 namespace 的其他情况的此文档 - Handling Namespaces in XQuery

关于xml - 如何在考虑 XML 命名空间的情况下替换 T-SQL 中的 XML 标记文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48638010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com