Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल सर्वर - DATEPART जैसे कार्यों के लिए निर्विवाद स्थिरांक पास करना

आप वास्तव में यूडीएफ के इनपुट को मूल्यों के एक छोटे से सेट (मेरी जानकारी के अनुसार) तक सीमित नहीं कर सकते।

मैं आपके प्रगणित मूल्यों के लिए एक टैब बनाने की सलाह दूंगा - कुछ इस तरह:

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 का उपयोग करने की योजना बना रहे हैं, तो प्रदर्शन कारणों से फ़ंक्शन को तालिका-मूल्यवान फ़ंक्शन बनाने पर विचार करें। मैंने यहां विभिन्न प्रकार के कार्यों के प्रदर्शन प्रभावों के बारे में ब्लॉग किया है:

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 सर्वर में सामान्य वितरण के साथ संख्याएँ कैसे उत्पन्न करें

  2. SUBSTRING () फ़ंक्शन का उपयोग करके SQL सर्वर में एक स्ट्रिंग से एक सबस्ट्रिंग कैसे लौटाएं?

  3. डेटाबेस में सभी प्राथमिक कुंजी की सूची प्राप्त करें

  4. IN क्लॉज के साथ डायनेमिक क्वेरी में मदद चाहिए

  5. सम्मिलित पैरामीटर के लिए अदिश चर @ID घोषित करना चाहिए