Хранимая процедура и пользовательская функция для обработки ошибок

В моей базе данных ERP используются необнуляемые поля даты и времени. Однако он вводит «» для даты и времени, когда он недоступен, и возвращает «1900-01-01 00: 00: 00.000» в качестве значения.

Я хочу подавить даты 1900 года, удалив дату только из поля Datetime. Для этого я создал следующую UDF:

CREATE FUNCTION ExtractDate(@DirtyDate DATETIME)
  RETURNS VARCHAR(10) AS
  BEGIN
    DECLARE @CleanDate VARCHAR(10)
    SELECT @CleanDate =
             CASE
               WHEN @DirtyDate = '' THEN ''
               ELSE CONVERT(VARCHAR(10), @DirtyDate, 101)
             END

    RETURN @CleanDate
  END

Это работает, но я хотел добавить обработку ошибок на случай, если пользователь использовал ее для чего-то другого, кроме поля даты и времени. После некоторого поиска в Google я узнал, что это невозможно с UDF.

Однако, если я напишу это как хранимую процедуру, смогу ли я вызвать ее в операторе select? Может ли кто-нибудь указать мне в правильном направлении?


person DavidStein    schedule 19.01.2010    source источник


Ответы (1)


Нет, вы не можете вызвать хранимую процедуру в операторе выбора.

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

person Brent Ozar    schedule 23.01.2010