В традиции this question и в свете the documentation, как можно сделать эту функцию детерминированный:Как сделать преобразования из varchar в datetime детерминированными?
ALTER FUNCTION [udf_DateTimeFromDataDtID]
(
@DATA_DT_ID int -- In form YYYYMMDD
)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
RETURN CONVERT(datetime, CONVERT(varchar, @DATA_DT_ID))
END
Или это одно (из-за строки/даты литералов - и да, я также пытался «1900 -01-01'):
ALTER FUNCTION udf_CappedDate
(
@DateTimeIn datetime
)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
IF @DateTimeIn < '1/1/1900'
RETURN '1/1/1900'
ELSE IF @DateTimeIn > '1/1/2100'
RETURN '1/1/2100'
RETURN @DateTimeIn
END
Итак, нет литальных дат в виде строк в UDF без конвертации? – 2008-11-21 20:55:27
Если строки неявно преобразуются в даты, то эти преобразования не имеют «постоянных» стилей и делают функцию недетерминированной. – 2008-11-21 21:08:16