Anda tidak dapat benar-benar membatasi input UDF ke sejumlah kecil nilai (sepengetahuan saya).
Saya akan merekomendasikan membuat tab untuk nilai enumerasi Anda - sesuatu seperti ini:
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)
Tentu saja, contoh saya terlalu disederhanakan, tetapi Anda mengerti.
Juga, pertimbangkan untuk menjadikan fungsi sebagai fungsi bernilai tabel untuk alasan kinerja, jika Anda berencana menggunakan udf dalam pernyataan yang ditetapkan. Saya membuat blog tentang implikasi kinerja dari berbagai jenis fungsi di sini:
http://thehobt.blogspot.com/2009 /02/scalar-functions-vs-table-valued.html