Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

DLA Atrybutów XML PATH i xsi:nil

Nie sądzę, że można zapobiec temu zachowaniu za pomocą podzapytań przy użyciu for xml path . Zgłoszono podobny problem tutaj. https ://connect.microsoft.com/SQLServer/feedback/details/265956/suppress-namespace-attributes-in-nested-select-for-xml-statements

Możesz uzyskać żądane wyjście, jeśli użyjesz for xml explicit zamiast tego.

declare @T table(Level1 int, Level2 int)
insert into @T values(null, 2)

select 1    as Tag,
       null as Parent,
       null as [root!1],
       null as [nested1!2!level1!ELEMENTXSINIL],
       null as [nested1!2!level2!ELEMENTXSINIL],
       null as [nested2!3!level1!ELEMENTXSINIL],
       null as [nested2!3!level2!ELEMENTXSINIL]
union all
select 2    as Tag,
       1    as Parent,
       null,
       Level1,
       Level2,
       null,
       null
from @T       
union all
select 3    as Tag,
       1    as Parent,
       null,
       null,
       null,
       Level1,
       Level2
from @T       
for xml explicit       

Wynik:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <nested1>
    <level1 xsi:nil="true" />
    <level2>2</level2>
  </nested1>
  <nested2>
    <level1 xsi:nil="true" />
    <level2>2</level2>
  </nested2>
</root>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy data nakłada się w SQL

  2. Zapomniałem dodać kolumnę klucza podstawowego jako tożsamość

  3. Jak mapować wiele partycji do jednej grupy plików w programie SQL Server (T-SQL)

  4. Jak wyeksportować dane w formacie CSV z SQL Server za pomocą sqlcmd?

  5. Jak zamienić wszystkie wystąpienia ciągu na inny ciąg w SQL Server – REPLACE()