У меня возникла проблема с SQL-запросом, предназначенным для возврата результирующих данных в виде XML. Вот дамп кода, чтобы показать вам все, что происходит:
SQL-запрос (Примечание: имена таблиц и столбцов отредактированы)
with resultdata as
(
SELECT
(
select * from Table1 (nolock)
where column1 = 99999 and column2 = -1 for xml auto, type
) as tabledata
UNION ALL
SELECT
(
select * from Table2 (nolock)
where column1 = 99999 and column2 = -1 for xml auto, type
)
UNION ALL
SELECT
(
select * from Table3 (nolock)
where column1 = 99999 and column2 = -1 for xml auto, type
)
UNION ALL
SELECT
(
select * from Table4 (nolock)
where column1 = 99999 and column2 = -1 for xml auto, type
)
UNION ALL
SELECT
(
select * from Table5 (nolock)
where column1 = 99999 and column2 = -1 for xml auto, type
)
UNION ALL
SELECT
(
select * from Table6 (nolock)
where column1 = 99999 and column2 = -1 for xml auto, type
)
UNION ALL
SELECT
(
select * from Table7 (nolock)
where column1 = 99999 and column2 = -1 for xml auto, type
)
UNION ALL
SELECT
(
select * from Table8 (nolock)
where column1 = 99999 and column2 = -1 for xml auto, type
)
)
select * from resultdata result for xml auto, elements
Это возвращает результат XML, который выглядит следующим образом (большая часть XML отредактирована, комментарии находятся там, где фактические данные):
<result>
<tabledata>
<!--Table1 results-->
</tabledata>
</result>
<result>
<tabledata>
<!--Table2 results-->
</tabledata>
</result>
<result>
<tabledata>
<!--Table3 results-->
</tabledata>
</result>
<result>
<tabledata>
<!--Table4 results-->
</tabledata>
</result>
<result>
<tabledata>
<!--Table5 results-->
</tabledata>
</result>
<result>
<tabledata>
<!--Table6 results-->
</tabledata>
</result>
<result>
<tabledata>
<!--Table7 results-->
</tabledata>
</result>
<result>
<tabledata>
<!--Table8 results-->
</tabledata>
</result>
Очевидно, что это искаженный XML, но я не могу его переработать, чтобы он давал мне результаты в правильном формате, примерно так:
<result>
<tabledata>
<!--Table1 results-->
</tabledata>
<tabledata>
<!--Table2 results-->
</tabledata>
<tabledata>
<!--Table3 results-->
</tabledata>
<tabledata>
<!--Table4 results-->
</tabledata>
<tabledata>
<!--Table5 results-->
</tabledata>
<tabledata>
<!--Table6 results-->
</tabledata>
<tabledata>
<!--Table7 results-->
</tabledata>
<tabledata>
<!--Table8 results-->
</tabledata>
</result>
В качестве примечания, это переписывание существующего запроса, который у нас есть, поэтому синтаксис в основном такой, какой он есть. Мой коллега начал переделывать его и, по сути, дал мне то, что я разместил здесь, однако я изо всех сил пытался заставить его работать, используя его изменения. Если мне нужно отказаться от него и начать с нуля, у меня нет проблем с этим.
Кроме того, как еще одно замечание, XML, который я хочу, должен выглядеть именно так, потому что в конечном итоге он потребляется XSLT, над которым у меня нет контроля. Старая версия этого запроса возвращала каждый элемент tabledata как другое имя столбца, а затем выполняла замену строки в коде C#, который его вызывает. Были проблемы с производительностью при выполнении нескольких замен строк в этом XML (может быть более 100 тысяч строк), поэтому ответ заключался в том, чтобы изменить запрос, чтобы он возвращал данные в том виде, в котором они нам нужны.