Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

serwer sql - przekazywanie stałych bez cudzysłowów do funkcji takich jak DATEPART

Nie możesz tak naprawdę ograniczyć danych wejściowych UDF do małego zestawu wartości (zgodnie z moją najlepszą wiedzą).

Polecam utworzenie tabe dla twoich wyliczonych wartości - coś takiego:

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)

Oczywiście mój przykład jest zbyt uproszczony, ale masz pomysł.

Rozważ również, aby funkcja była funkcją zwracającą tabelę ze względu na wydajność, jeśli planujesz używać funkcji udf w instrukcjach set. W tym miejscu pisałem na blogu o wpływie na wydajność różnych typów funkcji:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CONCAT_WS() dla SQL Server

  2. Różnica między dwiema datami w dokładnej liczbie godzin w SQL

  3. Warunki warunkowe w SQL Server

  4. Analiza MS SQL Server dla tych, którzy widzą go po raz pierwszy

  5. Eksplorowanie operacji indeksowania online na poziomie partycji w programie SQL Server 2014 CTP1