xml-sql中的名称空间

xml-sql中的名称空间,sql,xml,sql-server-2008,xml-namespaces,Sql,Xml,Sql Server 2008,Xml Namespaces,如何在查询中声明名称空间 我在声明名称空间时出错 Declare @Mydoc xml set @Mydoc = ( select importe, algo,XD, (select impuesto,tasa,transferencia from CfdiDet for xml raw('cfdi_detalle'),type) from cfdienc

如何在查询中声明名称空间

我在声明名称空间时出错

Declare @Mydoc xml
set @Mydoc = (
         select importe, algo,XD,
               (select impuesto,tasa,transferencia
                from CfdiDet
                for xml raw('cfdi_detalle'),type)
         from cfdienc
         for xml raw('cfdi_encabezado'),type)
这是我遇到问题的地方

set @Mydoc.modify('declare xmlnamespaces ('uri',cfdi')

我想用
“:”

替换
“\uquot
”:“

名称空间前缀不仅仅是字符串的一部分,您可以使用
.modify()
。。。好的,您可以将XML转换为字符串,执行
替换
并将其转换回XML。但是正确的方法是声明名称空间

要声明名称空间,可以将
与XMLNAMESPACES一起使用,也可以使用隐式名称空间声明(在您的情况下不可能)

试试这个

DECLARE @Mydoc XML;

WITH XMLNAMESPACES('uri' AS cfdi)
SELECT @Mydoc=
(
SELECT 'SomeDummy' AS importe
FOR XML RAW('cfdi:encabezado'),TYPE
);

SELECT @Mydoc 
结果

<cfdi:encabezado xmlns:cfdi="uri" importe="SomeDummy" />


您知道我是如何对文件进行编码的吗?它只在version=“1.0”中生成,现在…你是我的英雄!!:D@carlitus212XML声明
实际上并没有绑定到XML。这是告诉消费者有关内容及其编码的详细信息。如果真正的编码是
UCS-2
,那么将类似于
utf-8
的东西写入报头是毫无意义的。这个宣言不仅仅是一种神奇的魔法。。。当您将XML写入文件时,应该设置正确的编码并在标题中说明。本机不支持此操作。非常感谢,你帮了我很多忙:D@carlitus212只需使用类似于
REPLACE(CAST(您的xml为NVARCHAR(MAX))、'cfdi_'、'cfdi:')的内容即可
。并使用另一个
REPLACE()
STUFF()
将名称空间声明手动设置到根节点中。