如何使用 With XMLNamespaces 在 SQL 中创建自定义名称空间?

How do I use With XMLNamespaces to create custom name spaces in SQL?

我希望能够为 XML 根元素生成以下命名空间和类型

<BaseTransactionRequest xmlns="http://schemas.datacontract.org/2004/07/SomeCompany" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" i:type="AType">

通常前 2 个(即不包括 i:type="AType")可以毫无问题地生成(有一些权衡,当使用自定义命名空间时,我们不能使用 xmlns:ni 命名空间等) 所以,后一种类型是有问题的。对于推荐人, WITH XMLNAMESPACES fearure 的用法如下(FOR XML 部分省略):

;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' as i, DEFAULT 'http://schemas.datacontract.org/2004/07/SomeCompany',

要克服的解决方案是使用字符串连接编写 XML "literally"。但是我相信并希望FOR XML和这个可以一起使用。

编辑:第一次剪辑是在匆忙中添加的。道歉。 EDIT2:阅读障碍修复

你的问题不是很清楚...你可能对你的i:type="AType"有误解。这不是 命名空间 (无论 自定义命名空间 是什么),而是一个普通属性,名为 type,位于您的命名空间 i,在 xmlns:i="blah".

声明

试试这个

WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' as i
                   ,DEFAULT 'http://schemas.datacontract.org/2004/07/SomeCompany')
SELECT 'AType' AS [@i:type]
FOR XML PATH('BaseTransactionRequest');

结果是一个自闭标记,声明两个名称空间并包含您的属性:

<BaseTransactionRequest xmlns="http://schemas.datacontract.org/2004/07/SomeCompany" 
                        xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
                        i:type="AType" />