Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Server - Übergeben von Konstanten ohne Anführungszeichen an Funktionen wie DATEPART

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