Ошибка - операторы выбора, включенные в функцию, не могут возвращать данные клиенту.

Я пытаюсь создать функцию, которая будет запрашивать время в таблице, а затем возвращать правильное время на основе сайта.

Время в запрашиваемой таблице соответствует времени открытия и закрытия ветви. Я не уверен, следует ли мне использовать CASE или IF.

Когда я использую CASE, Я получаю эту ошибку:

Msg 444, уровень 16, состояние 2, рабочее время процедуры, строка 33
Операторы Select, включенные в функцию, не могут возвращать данные клиенту.

Когда я печатаю на экране, он работает нормально.

/добавил это для времени открытия и закрытия сайта/

DECLARE @WorkStart TIME
SET @WorkStart = '09:00'  

SELECT
    CASE    
        WHEN [Location Code] = 'OF' THEN [OpenTime]
        WHEN [Location Code] = 'MP' THEN [OpenTime]
        WHEN [Location Code] = 'GP' THEN [OpenTime]
        WHEN [Location Code] = 'EC' THEN [OpenTime]
        WHEN [Location Code] = 'WP' THEN [OpenTime]
        WHEN [Location Code] = 'ZN' THEN [OpenTime]
    END
FROM 
    [dbo].[OperationHours]

--PRINT @WorkStart
--GO

2 ответа

Решение

Во-первых, я думаю, что вы не указали все требования. Я ожидаю, что вы передадите код местоположения функции.

ваша функция могла бы выглядеть как

CREATE FUNCTION YourFunction
(
    @locationCode varchar(2)
)
RETURNS TIME
AS
BEGIN
    DECLARE @OpenTime TIME
    DECLARE @WorkStart TIME
    SET @WorkStart = '09:00'  

    SELECT @OpenTime = [OpenTime]
    FROM [dbo].[OperationHours]
    where @locationCode = [Location Code]

    RETURN ISNULL(@OpenTime, @WorkStart)
END

"Операторы выбора, включенные в функцию, не могут возвращать данные клиенту"

Чтобы прояснить сообщение об ошибке: вы должны присвоить результат переменной и вернуть переменную. SELECT, как показано в вашем вопросе, вернет набор данных клиенту. Как указано в сообщении об ошибке, это недопустимо для функции. Возврат набора данных работает для хранимой процедуры, но не для функции.

Исправление: назначьте результат вашего SELECT переменной.

Ответ @Illia выше должен работать.

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