При работе в оффшорно-онсайтовой среде в 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 всегда есть место для инноваций и поиска альтернативных подходов к решению проблем.