当前位置: 首页 > 面试题库 >

SQL Server XML添加属性(如果不存在)

习宸
2023-03-14
问题内容

我试图添加一个属性,如果它不存在。它应该很简单,但是我是XML XPath / XQuery / etc的新手,所以请原谅我的无知。

我希望能够传递XML数据并对其进行修改…

ALTER FUNCTION [dbo].[ConvertXmlData](@xmlData XML)
RETURNS XML
AS
BEGIN
  RETURN @xmlData.<something here>
END

如果我像这样传递数据:

<something> 
   this is sample data <xxx id="1"/> and <xxx id="2" runat="server" />. More <yyy id="3" />
</something>

我想要

<something>
this is sample data <xxx id="1" runat="server" /> and <xxx id="2" runat="server" />. More <yyy id="3" />

</something>

并不是 :

<something>
this is sample data <xxx id="1" runat="server" /> and <xxx id="2" runat="server" runat="server"/>. More <yyy id="3" />
</something>

问题答案:

你可以做

SET @xmlData.modify('insert attribute runat { "server" } into descendant::xxx[not(@runat)][1]');

但是,这只会更改xxx不具有runat属性的第一个后代,至少对于SQL Server 2005,您一次只能修改一个节点。

也许将以上内容与WHILE结合使用,例如

WHILE @xmlData.exist('descendant::xxx[not(@runat)]') = 1
BEGIN
  SET @xmlData.modify('insert attribute runat { "server" } into descendant::xxx[not(@runat)][1]');
END

我没有访问SQL Server 2008 R2的权限,但我认为修改一次仍仅限于一个节点,因此您可以尝试

ALTER FUNCTION [dbo].[ConvertXmlData](@xmlData XML)
RETURNS XML
AS
BEGIN
    WHILE @xmlData.exist('descendant::xxx[not(@runat)]') = 1
    BEGIN
      SET @xmlData.modify('insert attribute runat { "server" } into descendant::xxx[not(@runat)][1]');
    END
  RETURN @xmlData
END


 类似资料:
  • 我是网络开发新手,所以这可能是非常基本的。如果datainfo prop变量不是空的,我想向div标记添加一个数据属性 但是现在,如果datavalue是空的,则data属性会添加一个空值。相反,我希望它根本不会出现在div标签中。 我可以在JSX子句中添加整个内容吗?

  • 问题内容: 我看了很多例子。但是此查询不起作用,出现以下错误: 错误1064(42000):您的SQL语法有错误;在第1行的’IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =’)附近,查看与您的MySQL服务器版本相对应的手册以使用正确的语法。 问题答案: 您可以为查询创建一个过程,

  • 我想创建一个隐藏的输入字段:

  • 问题内容: 在我的数据库创建脚本中,创建脚本如下所示: 第一次运行良好,但是如果我再次运行,它将在最后一行失败,并带有“写入或更新时复制密钥”。 有什么办法可以做类似的事情吗?就像我可以使用查询吗? 问题答案: 有趣的问题。您可能需要在调用语句之前禁用外键,然后再启用它们。这将允许您直接在DDL中定义外键: 例: 测试用例:

  • 问题内容: 我如何添加到URL,如果它不包括协议(例如,或)? 例: 问题答案: @nickf代码的修改版本: 认识到,,和在不区分大小写的方式。

  • 问题内容: Postgres是否有任何办法说如果约束已经存在,它将忽略该命令,从而不会引发错误? 问题答案: 这可能有所帮助,尽管可能有点脏: 然后致电: 更新: 根据Webmut的以下建议: 在您的开发数据库中,或者在您知道可以关闭依赖该数据库的应用程序作为维护时段的情况下,这可能很好。 但是,如果这是一个至关重要的24x7全天候生产环境,那么您真的不想像这样随意地放弃约束。即使是几毫秒,也有一