sql >> Databáze >  >> RDS >> Sqlserver

sql server - předávání neuvedených konstant funkcím, jako je DATEPART

Nemůžete skutečně omezit vstup UDF na malou sadu hodnot (podle mého nejlepšího vědomí).

Doporučil bych vytvořit tabulku pro vaše vyjmenované hodnoty - něco takového:

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)

Můj příklad je samozřejmě příliš zjednodušený, ale chápete to.

Pokud plánujete použití udf v příkazech set, zvažte také vytvoření funkce s tabulkovou hodnotou z důvodů výkonu. Blogoval jsem o důsledcích výkonu různých typů funkcí zde:

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



  1. Analyzátor schémat MySQL v Javě?

  2. Mysql group_concat limit řádků v seskupení

  3. postgreSQL změní datový typ sloupce na časové razítko bez časového pásma

  4. postgresql malformovaný literál pole v create agregaci initcond