При создании функции SQL как проверить, используется ли таблица в текущем запросе, в который вызывается функция?
Мой основной запрос:
SELECT
a,
b,
c,
my_function(d),
into
temp
from
trade t,
party pt,
portfolio pr
Я хочу, чтобы моя функция проверяла, используется ли конкретная таблица в соединении (например, таблица "портфолио"). Если так, то он выполнит определенный блок кода и вернет некоторое значение. Если таблица не существует, она перейдет к следующему блоку кода в функции и вернет некоторое значение.
Что я хочу знать, так это как выполнить часть проверки, используется ли конкретная таблица в текущем запросе / соединении, и "кодировать" эту проверку в функцию? Я не собираюсь проверять, присутствует ли таблица в базе данных, но только если она присутствует в текущем запросе, в котором вызывается функция.
Функция будет примерно такой:
`
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION maturity_date
(
-- Add the parameters for the function here
@d int>
)
RETURNS date >
AS
BEGIN
-- I want to do the check here.I wnat to check if a particular table exists,
-- if so then execute the 1st block, else execute 2nd block
--1st block
Begin
RETURN end_day
End
Else
--2nd block
Begin
RETURN expiry_day
End
END
GO
`
1 ответ
Функция не имеет внутреннего доступа к запросу, который ее вызвал.
Единственный способ, которым функция могла бы узнать, присутствовала ли таблица в вызывающем запросе, - это передать ее в качестве параметра.
РЕДАКТИРОВАТЬ: После прочтения редактирования вашего вопроса мой ответ выше все еще точен, но я хотел бы далее предложить, я думаю, что вам будет лучше написать две функции. Функции SQL должны быть простыми и выполнять только одно. Написание одной функции, которая в одном случае выполняет одно, а в другом - что-то другое, является чрезмерной консолидацией.