Изменить параметры подписки на отчеты напрямую через SQL - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь обновить подписку на отчет с помощью задачи SQL, запущенной в службах SSIS (в которой различные параметры передаются через более ранний сценарий).

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

Я подозреваю, что проблема заключается в ошибке форматирования длядовольно случайная причина.Я вставил запись xml (которую сервер отчетов хранит в виде ntext) на вкладку кода XML VS.Перед тем, как я отредактирую запись, она будет выводиться в одну строку, и я буду вынужден отформатировать ее, после того, как я выполню обновление, она автоматически форматируется, когда я вставляю в ту же вкладку.Если я удаляю обновление (просто переписав отчет через пользовательский интерфейс), я возвращаюсь к вставке копии в одну строку

Я перепрыгнул через несколько обручей на этом.Хотя большая часть документации, которую я нашел, похоже, подразумевает, что я могу просто обновить поле в обычном режиме (Set blah = 'thing'), но если я это сделаю, оно просто сломается (буквально говорит, что формат XML неверен, если я поднимаюподписка в пользовательском интерфейсе).

Поскольку поле ntext, я начал приводить все это как ntext.Это поддерживает работу интерфейса, но приводит к описанной проблеме.Работа выполняется, говорит, что она завершена, ничего не выводится, теперь автоформаты при вставке в vscode, и я могу зайти в пользовательский интерфейс и просто нажать «применить» и перенести мой пароль, чтобы он действительно установил значения (это будет работать после того, как яэто, и он будет иметь значения, которые я передал предварительно заполнены)

Я бросил в COLLATE сегмент только для проверки, но это, казалось, ничего не меняет.

Вот что яВ настоящее время выполняется

UPDATE [ReportServer].[dbo].[Subscriptions]
SET Parameters =
CAST('<ParameterValues>
    <ParameterValue>
        <Name>Region</Name>
        <Value>'+
        (Select Region from [ReportServer].[dbo].[ParamOvershorts])
        +'</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>GMName</Name>
        <Value>'+
        (Select GMName from [ReportServer].[dbo].[ParamOvershorts])
        +'</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>EndDate</Name>
        <Value>2/8/2019 12:00:00 AM</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>StartDate</Name>
        <Value>2/1/2019 12:00:00 AM</Value>
    </ParameterValue>
</ParameterValues>' COLLATE Latin1_General_100_CI_AS_KS_WS AS ntext)
where SubscriptionID = 'ID is here'

Ожидаемый вывод должен представлять собой отчет с новыми параметрами.

Фактический вывод означает, что задание выполнено успешно (поэтому событие было добавлено), но ничего не выводится.

Edit-

Нашли решение, см. Ниже

1 Ответ

1 голос
/ 10 апреля 2019

Решил это. Код первый -

UPDATE Subscriptions
SET Parameters =(
    SELECT REPLACE(CAST(Parameters as varchar(1000)),'GMPARAMETER', (select gmname from ParamOvershorts)) from Subscriptions
) WHERE SubscriptionID = ID GOES HERE

Независимо от проблемы, связанной с типом / форматированием, функция замены не нарушает ее, поэтому вместо наличия в запросе реальных блоков Param xml я сначала подготавливаю подписку, заменяя все параметры родовыми именами (GMPARAMETER в этом случае), а затем используйте функцию замены, чтобы перевернуть параметр, выполнить отчет, а затем перевернуть параметр обратно к универсальному имени, чтобы он мог найти его в следующий раз.

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

Я все еще хотел бы знать, почему мое первоначальное решение не сработало.

...