Membuat, Mengubah, dan Menghapus Fungsi User-Defined

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics

Objek menyediakan UserDefinedFunction fungsionalitas yang memungkinkan pengguna mengelola fungsi yang ditentukan pengguna secara terprogram di Microsoft SQL Server. Fungsi yang ditentukan pengguna mendukung parameter input dan output, dan juga mendukung referensi langsung ke kolom tabel.

SQL Server mengharuskan rakitan didaftarkan dalam database sebelum dapat digunakan di dalam prosedur tersimpan, fungsi yang ditentukan pengguna, pemicu, dan jenis data yang ditentukan pengguna. SMO mendukung fitur ini dengan SqlAssembly objek .

Objek UserDefinedFunction mereferensikan rakitan .NET dengan AssemblyNameproperti , ClassName, dan MethodName .

UserDefinedFunction Ketika objek mereferensikan rakitan .NET, Anda harus mendaftarkan assembly dengan membuat SqlAssembly objek dan menambahkannya ke SqlAssemblyCollection objek , yang termasuk dalam Database objek .

Contoh

Untuk menggunakan contoh kode apa pun yang disediakan, Anda harus memilih lingkungan pemrograman, templat pemrograman, dan bahasa pemrograman untuk membuat aplikasi Anda. Untuk informasi selengkapnya, lihat Membuat Proyek SMO Visual C# di Visual Studio .NET.

Membuat Fungsi User-Defined Skalar di Visual Basic

Contoh kode ini menunjukkan cara membuat dan menghapus fungsi skalar yang ditentukan pengguna yang memiliki parameter objek input dan jenis pengembalian bilangan DateTime bulat di Visual Basic. Fungsi yang ditentukan pengguna dibuat pada database AdventureWorks2019. Contoh membuat fungsi yang ditentukan pengguna, ISOweek, yang mengambil argumen tanggal dan menghitung nomor minggu ISO. Agar fungsi ini dihitung dengan benar, opsi DATEFIRST database harus diatur ke 1 sebelum fungsi dipanggil.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks2012 2008R2 database.
Dim db As Database
db = srv.Databases("AdventureWorks2012")
'Define a UserDefinedFunction object variable by supplying the parent database and the name arguments in the constructor.
Dim udf As UserDefinedFunction
udf = New UserDefinedFunction(db, "IsOWeek")
'Set the TextMode property to false and then set the other properties.
udf.TextMode = False
udf.DataType = DataType.Int
udf.ExecutionContext = ExecutionContext.Caller
udf.FunctionType = UserDefinedFunctionType.Scalar
udf.ImplementationType = ImplementationType.TransactSql
'Add a parameter.
Dim par As UserDefinedFunctionParameter
par = New UserDefinedFunctionParameter(udf, "@DATE", DataType.DateTime)
udf.Parameters.Add(par)
'Set the TextBody property to define the user defined function.
udf.TextBody = "BEGIN  DECLARE @ISOweek int SET @ISOweek= DATEPART(wk,@DATE)+1 -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104') IF (@ISOweek=0) SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1 IF ((DATEPART(mm,@DATE)=12) AND ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) SET @ISOweek=1 RETURN(@ISOweek) END;"
'Create the user defined function on the instance of SQL Server.
udf.Create()
'Remove the user defined function.
udf.Drop()

Membuat Fungsi User-Defined Skalar di Visual C #

Contoh kode ini menunjukkan cara membuat dan menghapus fungsi skalar yang ditentukan pengguna yang memiliki parameter objek input dan jenis pengembalian bilangan DateTime bulat di Visual C#. Fungsi yang ditentukan pengguna dibuat pada database AdventureWorks2019. Contoh membuat fungsi yang ditentukan pengguna. ISOweek. Fungsi ini mengambil argumen tanggal dan menghitung nomor minggu ISO. Agar fungsi ini dihitung dengan benar, opsi database DATEFIRST harus diatur ke 1 sebelum fungsi dipanggil.

{  
            //Connect to the local, default instance of SQL Server.   
           Server srv = new Server();  
            //Reference the AdventureWorks2012 database.   
           Database db = srv.Databases["AdventureWorks2012"];  
  
            //Define a UserDefinedFunction object variable by supplying the parent database and the name arguments in the constructor.   
            UserDefinedFunction udf = new UserDefinedFunction(db, "IsOWeek");  
  
            //Set the TextMode property to false and then set the other properties.   
            udf.TextMode = false;  
            udf.DataType = DataType.Int;  
            udf.ExecutionContext = ExecutionContext.Caller;  
            udf.FunctionType = UserDefinedFunctionType.Scalar;  
            udf.ImplementationType = ImplementationType.TransactSql;  
  
            //Add a parameter.   
  
     UserDefinedFunctionParameter par = new UserDefinedFunctionParameter(udf, "@DATE", DataType.DateTime);  
            udf.Parameters.Add(par);  
  
            //Set the TextBody property to define the user-defined function.   
            udf.TextBody = "BEGIN DECLARE @ISOweek int SET @ISOweek= DATEPART(wk,@DATE)+1 -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104') IF (@ISOweek=0) SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1 IF ((DATEPART(mm,@DATE)=12) AND ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) SET @ISOweek=1 RETURN(@ISOweek) END;";  
  
            //Create the user-defined function on the instance of SQL Server.   
            udf.Create();  
  
            //Remove the user-defined function.   
            udf.Drop();  
        }  

Membuat Fungsi User-Defined Skalar di PowerShell

Contoh kode ini menunjukkan cara membuat dan menghapus fungsi skalar yang ditentukan pengguna yang memiliki parameter objek input dan jenis pengembalian bilangan DateTime bulat di Visual C#. Fungsi yang ditentukan pengguna dibuat pada database AdventureWorks2019. Contoh membuat fungsi yang ditentukan pengguna. ISOweek. Fungsi ini mengambil argumen tanggal dan menghitung nomor minggu ISO. Agar fungsi ini dihitung dengan benar, opsi database DATEFIRST harus diatur ke 1 sebelum fungsi dipanggil.

# Set the path context to the local, default instance of SQL Server and get a reference to AdventureWorks2012  
CD \sql\localhost\default\databases  
$db = get-item Adventureworks2012  
  
# Define a user defined function object variable by supplying the parent database and name arguments in the constructor.   
$udf  = New-Object -TypeName Microsoft.SqlServer.Management.SMO.UserDefinedFunction `  
-argumentlist $db, "IsOWeek"  
  
# Set the TextMode property to false and then set the other properties.   
$udf.TextMode = $false  
$udf.DataType = [Microsoft.SqlServer.Management.SMO.DataType]::Int   
$udf.ExecutionContext = [Microsoft.SqlServer.Management.SMO.ExecutionContext]::Caller  
$udf.FunctionType = [Microsoft.SqlServer.Management.SMO.UserDefinedFunctionType]::Scalar  
$udf.ImplementationType = [Microsoft.SqlServer.Management.SMO.ImplementationType]::TransactSql  
  
# Define a Parameter object variable by supplying the parent function, name and type arguments in the constructor.  
$type = [Microsoft.SqlServer.Management.SMO.DataType]::DateTime  
$par  = New-Object -TypeName Microsoft.SqlServer.Management.SMO.UserDefinedFunctionParameter `  
-argumentlist $udf, "@DATE",$type  
  
# Add the parameter to the function  
$udf.Parameters.Add($par)  
  
#Set the TextBody property to define the user-defined function.   
$udf.TextBody = "BEGIN DECLARE @ISOweek int SET @ISOweek= DATEPART(wk,@DATE)+1 -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104') IF (@ISOweek=0) SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1 IF ((DATEPART(mm,@DATE)=12) AND ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) SET @ISOweek=1 RETURN(@ISOweek) END;"  
  
# Create the user-defined function on the instance of SQL Server.   
$udf.Create()  
  
# Remove the user-defined function.   
$udf.Drop()  

Lihat juga

UserDefinedFunction