Sie können die Eingabe einer UDF nicht wirklich auf eine kleine Menge von Werten beschränken (soweit ich weiß).
Ich würde empfehlen, eine Tabelle für Ihre aufgezählten Werte zu erstellen - etwa so:
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)
Natürlich ist mein Beispiel zu stark vereinfacht, aber Sie verstehen schon.
Erwägen Sie außerdem, die Funktion aus Leistungsgründen zu einer Tabellenwertfunktion zu machen, wenn Sie vorhaben, udf in set-Anweisungen zu verwenden. Ich habe hier über die Leistungsauswirkungen verschiedener Funktionstypen gebloggt:
http://thehobt.blogspot.com/2009 /02/scalar-functions-vs-table-valued.html