Выбор SQL для явного XML - нужна помощь в определении альтернативной структуры, когда значение равно нулю - PullRequest
3 голосов
/ 19 марта 2012

У меня следующий запрос SQL, в котором у меня возникают проблемы с явным определением формы для

select tableName, uqName, col1, col2
from someTable

. Я хотел бы выбрать результаты в XML, как показано ниже.Мне нужно, чтобы col1 и col2 отображались как дочерние, а tableName и uqName - как атрибуты.Если col1 или col2 null, тогда мне нужно указать атрибут IsNull.В противном случае значение выбирается в качестве текстового узла в качестве дочернего элемента элемента Col *

Одна строка, возвращенная из приведенного выше SQL, будет выглядеть следующим образом:

<UniqueKey Name="UniqueKeyName" TableName="TableName" >
  <Col Name="col1" IsNull="true" />
  <Col Name="col2">ABC</Col>
</UniqueKey>

Как я могу явно определить этот XMLформа с использованием SQL Server 2008 R2?

1 Ответ

4 голосов
/ 19 марта 2012
declare @T table
(
  tableName varchar(20),
  uqName varchar(20),
  col1 varchar(10),
  col2 varchar(10)
)

insert into @T values
('TableName', 'UniqueKeyName', null, 'ABC')
insert into @T values
('TableName', 'UniqueKeyName', null, null)
insert into @T values
('TableName', 'UniqueKeyName', '123', '456')

select uqName as "@Name",
       tableName as "@TableName",
       (select 'col1' as "@Name",
               case when col1 is null then 'true' end as "@IsNull",
               col1 as "*"
        for xml path('Col'), type),
       (select 'col2' as "@Name",
               case when col2 is null then 'true' end as "@IsNull",
               col2 as "*"
        for xml path('Col'), type)
from @T
for xml path('UniqueKey')

Результат:

<UniqueKey Name="UniqueKeyName" TableName="TableName">
  <Col Name="col1" IsNull="true" />
  <Col Name="col2">ABC</Col>
</UniqueKey>
<UniqueKey Name="UniqueKeyName" TableName="TableName">
  <Col Name="col1" IsNull="true" />
  <Col Name="col2" IsNull="true" />
</UniqueKey>
<UniqueKey Name="UniqueKeyName" TableName="TableName">
  <Col Name="col1">123</Col>
  <Col Name="col2">456</Col>
</UniqueKey>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...