Du kan ikke rigtig begrænse input fra en UDF til et lille sæt værdier (så vidt jeg ved).
Jeg vil anbefale at oprette en tavle for dine opregnede værdier - noget som dette:
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)
Selvfølgelig er mit eksempel forsimplet, men du forstår.
Overvej også at gøre funktionen til en funktion med tabelværdi af præstationsmæssige årsager, hvis du planlægger at bruge udf i sæt-sætninger. Jeg bloggede om præstationsimplikationerne af forskellige funktionstyper her:
http://thehobt.blogspot.com/2009 /02/scalar-functions-vs-table-valued.html