Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

sql сървър - предаване на константи без кавички към функции като DATEPART

Не можете наистина да ограничите въвеждането на UDF до малък набор от стойности (доколкото ми е известно).

Бих препоръчал да създадете таблица за вашите изброени стойности - нещо подобно:

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)

Разбира се, примерът ми е прекалено опростен, но схващате идеята.

Също така, помислете за превръщането на функцията в таблична функция от съображения за производителност, ако планирате да използвате udf в set изрази. Написах блог за последиците от производителността на различни типове функции тук:

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. Как да избягвате низове в SQL Server с помощта на PHP?

  2. Неуспешно влизане за потребител xxx Неуспешно отваряне на изрично посоченото решение за база данни

  3. Как да импортирам файл на Excel в SQL Server?

  4. Как да добавите AM/PM към времева стойност в SQL Server (T-SQL)

  5. Връщане на списък с имейли, изпратени от SQL Server Database Mail (T-SQL)