sql-server - 为什么 namespace 定义出现在此查询的内部元素以及外部元素上

标签 sql-server tsql sql-server-2012

考虑以下相当简单的 sql 查询;

    Declare @ad varchar(3) = 'GBR',
    @date varchar(10) ,
    @time varchar(5),
    @refnum varchar(17),
    @tm varchar(2) = 'CU';

    Set @date = FORMAT(GETUTCDATE(),'yyyy-MM-dd');
    Set @time = FORMAT(GETUTCDATE(),'HH-mm');
    Set @refnum = 'DOM' + FORMAT(GETUTCDATE(),'yyyyMMdd') + '123456';
    WITH XMLNAMESPACES ('http://ec.europa.eu/fisheries/schema/ers/v3' as ers) 


    Select @ad AS '@AD',
    @ad AS '@FR',
    @refnum AS '@ON',
    @date as '@OD',
    @time AS '@OT',

    (Select @tm AS  '@TM' For xml path('ers:DAT'), TYPE)

    For xml path('ers:OPS')
GO

我期待/希望从中得到的结果如下;

    <ers:OPS xmlns:ers="http://ec.europa.eu/fisheries/schema/ers/v3" AD="GBR" FR="GBR" ON="DOM20170411123456" OD="2017-04-11" OT="14-47">
  <ers:DAT  TM="CU" />
</ers:OPS>

而我实际上得到的是;

    <ers:OPS xmlns:ers="http://ec.europa.eu/fisheries/schema/ers/v3" AD="GBR" FR="GBR" ON="DOM20170411123456" OD="2017-04-11" OT="14-47">
  <ers:DAT xmlns:ers="http://ec.europa.eu/fisheries/schema/ers/v3" TM="CU" />
</ers:OPS>

我的问题很简单,为什么我得到了我所做的,我应该做什么才能得到我所希望的?

最佳答案

这是一个已知问题(实际上它是一个功能,投票决定删除)并且自 2007 年以来有一个 Connect 项目打开。 你可以看看here .

描述了一种可能的解决方法 here .

关于sql-server - 为什么 namespace 定义出现在此查询的内部元素以及外部元素上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43349416/

相关文章:

asp.net - 'Thread was being aborted.' 'at SNIReadSync(SNI_Conn* , SNI_Packet** , Int32 )' 是什么意思?

SQL Server 探查器不显示 LINQ To Sql 查询

sql - 将引用设置为 null 或 0 是否无效?

sql - 查找每行的最大列名称和值

sql-server - 避免在 WHERE 子句中引用表两次

c# - "The operation is not valid for the state of the transaction"错误和交易范围

sql - 在插入查询中动态选择列名

json - "expand"/在 MSSQL 上通过 JSON 值加入 SQL 选择

sql - 选择 'EXIST' 或 'NotExist' 作为列

windows-7 - 安装和创建 SQL Server 2012 实例