При создании функции 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 должны быть простыми и выполнять только одно. Написание одной функции, которая в одном случае выполняет одно, а в другом - что-то другое, является чрезмерной консолидацией.

Другие вопросы по тегам