SSRS – повторное использование временной таблицы в нескольких наборах данных
У меня есть отчет о SSRS, который имеет 14 подписок. Все эти подзаголовки считываются из одной и той же хранимой процедуры, но представляют данные по-разному (из-за разных вычислений). То, как я написал СП, выглядит следующим образом:
IF OBJECT_ID('tempdb.dbo.#blabla') IS NOT NULL BEGIN DROP TABLE #blabla END SELECT a,b,c,d,e INTO #blabla WHERE a='bla' IF @type = 1 --report 1 BEGIN SELECT .... END IF @type = 2 --report 2 BEGIN SELECT ..... END
И так далее для каждого отчета.
Я создаю 3 временных таблицы в начале хранимой процедуры, которые служат для подачи данных, которые нужно преобразовать. Проблема заключается в том, что для каждого суб-отчета таблицы продолжают воссоздавать себя, что заставляет отчет занять много времени, чтобы создать его. Существует ли какое-либо обходное решение, которое может повторно использовать таблицы, созданные в начале хранимой процедуры?
- Конструктор отчетов SSRS 2012 не запускается с удаленного хоста - 401 Несанкционированный
- Выполнить набор данных на основе значения параметра -SSRS
- СОЮЗУ или НЕ СОЮЗУ
- SQL Выберите только месяц из формата YYYYMMDD int
- Задайте значение параметра SSRS Report Parameter с переданным значением Querystring в SSRS
- SSRS объединяет и объединяет два отчета в один отчет
- Как создать гистограмму на SSRS
- Epicor 10 (ERP) Ошибка отчетности SSRS: максимум 1024 столбца возвращены
- Параметр SSRS multi-select не может записывать значения с запятой
- # Ужасно даже после использования IIF, чтобы избежать деления на нуль в выражении
- Записи SSRS не отображаются, когда используется (выберите все), но при выборе особого значения
- Создатель отчетов SSRS, как скрыть конкретное текстовое поле, экспортирующее в Excel
- Обновить общий путь к источнику данных всех отчетов SSRS для разных путей
Вы можете создать другую таблицу (контрольную таблицу), содержащую одну строку, которая содержит два столбца – даты начала и окончания таблицы temp. Когда каждый отчет начинается, он должен проверять текущую дату по датам в таблице управления. Если даты не текут, перестройте временные таблицы, иначе просто продолжите обработку. Если вы создаете временные таблицы, которые будут совместно использоваться таким образом, вы, вероятно, не хотите создавать временные таблицы только для обычных таблиц.
Другой подход заключается в выполнении задания SQL Server, которое каждую ночь в полночь перестраивает рабочий стол.
Кстати, вы можете создавать индексы во временных таблицах, и вам следует серьезно подумать о добавлении кластерного индекса в таблицу temp. Вы можете обнаружить, что у вас намного быстрее результаты против такой таблицы, даже если это «маленькая» таблица.
Поскольку вы используете отдельные подзаголовки, запросы для каждого из них не будут использовать ту же транзакцию, где находятся временные таблицы. SQL Server отбрасывает таблицы, когда соединение для запроса теряется.
Вы можете попытаться объединить все свои вложенные отчеты в один. Они позволят вам использовать таблицы #TEMP для каждого запроса, если вы установите флажок Use Single Transaction
единую Use Single Transaction
в источнике данных .
Другим было бы использование Global Temp Tables – ## TEMP . Глобальные таблицы Temp не получают автоматическое отбрасывание и могут использоваться другими подписями.