Для получения данных в MS SQL можно использовать sql запросы, хранимые процедуры и хранимые функции. Ранее мы уже рассмотрели, как использовать динамические запросы и хранимые процедуры в качестве источника данных отчета. В этой статье мы создадим табличную и скалярную функцию и используем их в отчете.
Напомню, табличные функции возвращают таблицы, а скалярные функции возвращают одиночные значения.
Создадим табличную функцию в MS SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
USE [testdb] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Description: Returns customers who live in the specified city -- ============================================= CREATE FUNCTION [dbo].[GetCustomersFromCity] ( @city VARCHAR(20) ) RETURNS TABLE AS RETURN ( SELECT * FROM dbo.CUSTOMER WHERE CITY = @city ) |
Функция принимает один параметр – название города, а возвращает список клиентов в этом городе.
Давайте сразу добавим еще одну, теперь скалярную функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
USE [testdb] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Description: Returns last added customer -- ============================================= CREATE FUNCTION [dbo].[GetLastCustomer] () RETURNS VARCHAR(30) AS BEGIN DECLARE @Name VARCHAR(30) SELECT TOP 1 @Name = CONCAT(ind.FIRST_NAME, ' ', ind.LAST_NAME) FROM dbo.Customer cus JOIN dbo.Individual ind ON ind.CUST_ID = cus.CUST_ID ORDER BY cus.CUST_ID RETURN @Name END |
Эта функция не принимает параметров, а возвращает ФИО последнего зарегистрированного клиента.
Теперь перейдем к отчету.
Прежде всего создадим параметр в отчете. Мы будем использовать его для передачи названия города в функцию, для получения данных.
Добавим подключение к базе данных MS SQL:
Далее, на следующем шаге нам предлагается выбрать таблицы, но мы воспользуемся кнопкой Add SQL query…
На следующем шаге задаем имя новой таблицы – TableFunction. Нажимаем Next.
Функции, в отличие от хранимых процедур используются как таблицы. То есть для получения данных нужно использовать Select.
На следующем шаге нам нужно добавить параметр запроса city. В его свойстве Expression выбираем параметр отчета Param. Переходим далее и нажимаем Finish.
И получаем новый источник данных:
Теперь добавим диалоговую форму и перетащим на нее параметр отчета – Param.
Перетаскиваем поля из таблицы TableFunction на бэнд Данные.
Запустим отчет. Вводим значение в диалоговой форме:
И получаем выборку из табличной функции:
Вы не забыли, в начале статьи мы создали две функции? Этот пример еще проще, потому что я не добавил входящий параметр в эту функцию. Создадим еще один источник данных. Также, как и в первый раз – подключение к MS SQL. И опять нажимаем кнопку Add SQL query…
Вызов скалярной функции немного отличается от вызова табличной функции:
Пропускаем все остальные шаги.
Добавим еще одну страницу отчета и перетаскиваем на бэнд данные единственное поле из нового источника данных – ScalarFunc.
Запустим отчет. Переходим на вторую страницу:
Как видите, использовать функции, для получения данных очень просто, и они помогут вам сэкономить время при разработке отчета и его выполнении.