Published on

February 24, 2015

Импровизация кода SQL Server: работа с пользовательскими функциями

При работе в оффшорно-онсайтовой среде в IT-индустрии часто приходится идти на компромиссы. Один из таких компромиссов – разработка кода на основе нелогичных ограничений, накладываемых командой разработчиков/DBA на месте. Однако эти ограничения также могут представлять возможности для обучения и импровизации.

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

Требование

Требовалось получить список сотрудников, дата приема которых попадает в заданный диапазон дат. Однако мы могли получить доступ к данным только через UDF. Например, была таблица с названием “emp_man” и соответствующая UDF с названием “ufn_getempl”, которая принимала дату приема в качестве параметра и возвращала данные о сотруднике.

Решение

Проблема заключалась в том, что UDF принимала только дату приема на работу, в то время как нам нужно было разработать хранимую процедуру, которая принимала начальную и конечную даты. Чтобы преодолеть это, я придумал логику, используя оператор CROSS APPLY и таблицу конфигурации.

Сначала мы добавляем один день к начальной дате и выполняем UDF. Мы повторяем этот процесс, пока не достигнем конечной даты. Реализация включает использование оператора CROSS APPLY и таблицы конфигурации, которая содержит значения инкремента от 1 до количества дней, на которое система должна работать.

Вот пример того, как выглядит хранимая процедура:

CREATE PROCEDURE usp_getemp (@startdate datetime, @enddate datetime)
AS
SELECT e.empid, e.hiredate
FROM config c
CROSS APPLY ufn_getempl(DATEADD(dd, c.sno-1, @startdate)) e
WHERE (DATEDIFF(dd, @startdate, @enddate) >= sno OR sno = 1)

В этом примере таблица “config” содержит значения инкремента от 1 до максимального диапазона дат, которые должны передаваться в хранимую процедуру.

Путем выполнения хранимой процедуры с соответствующими параметрами мы можем получить желаемый результат.

Заключение

Работа с ограниченным доступом к таблицам и использование пользовательских функций может представлять некоторые сложности. Однако, с помощью импровизации и творческого мышления, можно преодолеть эти ограничения и достичь желаемых результатов. Используя такие техники, как оператор CROSS APPLY и таблицы конфигурации, мы можем обойти ограничения и разработать эффективные решения.

Помните, в мире SQL Server всегда есть место для инноваций и поиска альтернативных подходов к решению проблем.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.