sql >> Database >  >> RDS >> Sqlserver

sql-server - niet-aangehaalde constanten doorgeven aan functies zoals DATEPART doet

Je kunt de invoer van een UDF niet echt beperken tot een kleine set waarden (voor zover ik weet).

Ik zou aanraden om een ​​tab te maken voor je opgesomde waarden - zoiets als dit:

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)

Natuurlijk is mijn voorbeeld te simpel, maar je snapt het idee.

Overweeg ook om van de functie een functie met tabelwaarde te maken om prestatieredenen, als u van plan bent de udf in set-instructies te gebruiken. Ik blogde hier over de prestatie-implicaties van verschillende functietypes:

http://thehobt.blogspot.com/2009 /02/scalar-functions-vs-table-valued.html



  1. Postgresql - Hoe extraheer ik het eerste voorkomen van een subtekenreeks in een tekenreeks met behulp van een patroon voor reguliere expressies?

  2. Hoe te voorkomen dat PHP lege rijen/velden toevoegt aan de MYSQL-database

  3. Groeperen op maand of 0 indien geen resultaten?

  4. C# Entity Framework:Trefwoord niet ondersteund:'poort'