sql >> Database teknologi >  >> RDS >> Sqlserver

sql server - videregivelse af konstanter uden anførselstegn til funktioner som DATEPART gør

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



  1. Kan jeg oprette visning i min databaseserver fra en anden databaseserver

  2. Hvordan sammenligner man versionsstreng (x.y.z) i MySQL?

  3. Forklar venligst funktionaliteten af ​​select max(...) ... group by i sql

  4. Hvordan bruger man DATEDIFF til at returnere år, måned og dag?