При желании использовать для XML в SQL Server - PullRequest
3 голосов
/ 05 марта 2012

У меня есть вопрос, который беспокоит меня некоторое время, но я не смог найти подходящих ответов для моей конкретной ситуации.

В настоящее время я работаю с сетом.хранимых процедур, у которых есть параметр AsXML, который сообщает proc для возврата результатов в виде XML-документа.Теперь это хорошо и работает хорошо, но способ, которым мы достигаем этого, не очень хорош.Весь запрос строится в строке и выполняется командой EXEC.Лично я думаю, что это ужасно, так как затрудняет отладку более сложных процедур и действительно является бельмом на глазу.Это также очень сложно объяснить новым сотрудникам, которые практически не имеют опыта работы с SQL.Должен быть более хороший способ сделать это.

Я уже думал об использовании двух отдельных хранимых процедур или о том, чтобы вызывающий код превратил результат таблицы в документ XML, но ни один из них не подходит для старших руководителей, которые имеют последнее слово.Я надеялся, что кто-нибудь сможет найти другое решение, которое пометит все нужные поля.

Для решения необходимо:

  • Работа в одной хранимой процедуре
  • Создание XML или стандартного набора результатов таблицы на основе параметра
  • Не использовать динамический SQL
  • Не заставлять нас писать запрос дважды (один с FOR XML, а другой без)

Есть какие-нибудь мысли, предложения или решения?

1 Ответ

4 голосов
/ 05 марта 2012

Одной из идей было бы построить результат и поместить его в таблицу #temp.

CREATE PROCEDURE dbo.foo
    @AsXML BIT = 0
AS
BEGIN
    SET NOCOUNT ON;

    SELECT * INTO #blat FROM <complicated query>;

    IF @AsXML = 1
    BEGIN
        SELECT * FROM #blat FOR XML PATH ...;
    END
    ELSE
    BEGIN
        SELECT * FROM #blat;
    END 
END
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...