Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

sql server - meneruskan konstanta yang tidak dikutip ke fungsi seperti yang dilakukan DATEPART

Anda tidak dapat benar-benar membatasi input UDF ke sejumlah kecil nilai (sepengetahuan saya).

Saya akan merekomendasikan membuat tab untuk nilai enumerasi Anda - sesuatu seperti ini:

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)

Tentu saja, contoh saya terlalu disederhanakan, tetapi Anda mengerti.

Juga, pertimbangkan untuk menjadikan fungsi sebagai fungsi bernilai tabel untuk alasan kinerja, jika Anda berencana menggunakan udf dalam pernyataan yang ditetapkan. Saya membuat blog tentang implikasi kinerja dari berbagai jenis fungsi di sini:

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. Cara Menampilkan Query dan Hasil di Tab Terpisah di SQL Server Management Studio (SSMS) - Tutorial SQL Server / TSQL Part 15

  2. Bagaimana cara membagi string menggunakan char pembatas menggunakan T-SQL?

  3. SQL Server:Temukan nilai default kolom dengan kueri

  4. Bagaimana Memetakan Kolom Input dan Output secara dinamis di SSIS?

  5. Pemisahan Persimpangan Rentang Tanggal dalam SQL