Nie możesz tak naprawdę ograniczyć danych wejściowych UDF do małego zestawu wartości (zgodnie z moją najlepszą wiedzą).
Polecam utworzenie tabe dla twoich wyliczonych wartości - coś takiego:
CREATE TABLE MyEnumTable (DatePartID tinyint, DatePartValue char(2))
GO
INSERT MyEnumTable(DatePartID, DatePartValue)
SELECT 1, 'yy'
UNION
SELECT 2, 'mm'
UNION
SELECT 3, 'dd'
UNION
SELECT 4, 'hh'
GO
CREATE FUNCTION MyDatePart(@IntervalType tinyint)
RETURNS varchar(255)
AS
BEGIN
IF NOT EXISTS (SELECT * FROM MyEnumTable WHERE DatePartID = @IntervalType)
RETURN 'Invalid IntervalType'
--Do your stuff
DECLARE @DatePartvalue char(2)
SELECT @DatePartValue = DatePartValue
FROM MyEnumTable
WHERE DatePartID = @IntervalType
RETURN @DatePartValue
END
GO
--Check it out
SELECT dbo.MyDatePart(3), dbo.MyDatePart(12)
Oczywiście mój przykład jest zbyt uproszczony, ale masz pomysł.
Rozważ również, aby funkcja była funkcją zwracającą tabelę ze względu na wydajność, jeśli planujesz używać funkcji udf w instrukcjach set. W tym miejscu pisałem na blogu o wpływie na wydajność różnych typów funkcji:
http://thehobt.blogspot.com/2009 /02/scalar-functions-vs-table-valued.html