Udostępnij za pośrednictwem


Tworzenie, modyfikowanie i usuwanie funkcji zdefiniowanej przez użytkownika

The UserDefinedFunction object provides functionality that lets users programmatically manage user-defined functions in Microsoft SQL Server.Funkcje zdefiniowane przez użytkownika obsługują dane wejściowe i wyjściowe parametrów i obsługiwać bezpośredniego odwołania do kolumn tabela.

SQL Server wymaga zestawów zarejestrowane w bazie danych przed te mogą być używane wewnątrz procedur przechowywanych, funkcji, wyzwalaczy i typy danych zdefiniowane przez użytkownika zdefiniowane przez użytkownika.SMO obsługuje tę funkcję z SqlAssembly obiektu.

UserDefinedFunction Odwołania do obiektu.wirtualny plik dziennika netto z AssemblyName, ClassName, i MethodName Właściwości.

Gdy UserDefinedFunction odwołania do obiektu.wirtualny plik dziennika netto, należy zarejestrować zgromadzenie tworząc SqlAssembly obiektów i dodawania go do SqlAssemblyCollection obiekt, który należy do Database obiektu.

Przykład

Aby używać dostarczonych przykładów kodu źródłowego, należy wybrać środowisko, szablon oraz język programowania, które będą używane do tworzenia aplikacji.Aby uzyskać więcej informacji, zobacz Jak Tworzenie projektu SMO Visual Basic w programie Visual Studio.NET lub Jak Tworzenie projektu programu Visual C# SMO w programie Visual Studio.NET.

Tworzenie skalarnej zdefiniowanej przez użytkownika funkcji języka Visual Basic

Poniższy przykład kodu pokazuje sposób tworzenia i usuwania wartość skalarna funkcji zdefiniowanej przez użytkownika, która ma wejście DateTime parametr obiektu i zwracany typ Liczba całkowita w Visual Basic. Funkcja zdefiniowana przez użytkownika jest tworzony na AdventureWorks2008R2 bazy danych.Przykład tworzy funkcja zdefiniowaną przez użytkownika, ISOweek, która przyjmuje argument Data i numer tygodnia ISO oblicza.Dla tej funkcja do obliczania poprawnie DATEFIRST opcję bazy danych musi być zestaw 1 przed wywołania funkcja.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks2008R2 database.
Dim db As Database
db = srv.Databases("AdventureWorks2008R2")
'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()

Tworzenie skalarnej zdefiniowanej przez użytkownika funkcji języka Visual C#

Poniższy przykład kodu pokazuje sposób tworzenia i usuwania wartość skalarna funkcji zdefiniowanej przez użytkownika, która ma wejście DateTime parametr obiektu i zwracany typ Liczba całkowita w Visual C#.Funkcja zdefiniowana przez użytkownika jest tworzony na AdventureWorks2008R2 bazy danych.Przykład tworzy funkcję zdefiniowaną przez użytkownika. ISOweek. Ta funkcja przyjmuje argument Data i oblicza numer tygodnia ISO.Dla tej funkcja do obliczania poprawnie, baza danych DATEFIRST opcja musi być zestaw do 1 przed wywołania funkcja.

{
            //Connect to the local, default instance of SQL Server. 
           Server srv = new Server();
            //Reference the AdventureWorks2008R2 database. 
           Database db = srv.Databases["AdventureWorks2008R2"];

            //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();
        }

Tworzenie zdefiniowanej przez użytkownika funkcji skalarnej w PowerShell

Poniższy przykład kodu pokazuje sposób tworzenia i usuwania wartość skalarna funkcji zdefiniowanej przez użytkownika, która ma wejście DateTime parametr obiektu i zwracany typ Liczba całkowita w Visual C#.Funkcja zdefiniowana przez użytkownika jest tworzony na AdventureWorks2008R2 bazy danych.Przykład tworzy funkcję zdefiniowaną przez użytkownika. ISOweek. Ta funkcja przyjmuje argument Data i oblicza numer tygodnia ISO.Dla tej funkcja do obliczania poprawnie, baza danych DATEFIRST opcja musi być zestaw do 1 przed wywołania funkcja.

# Set the path context to the local, default instance of SQL Server and get a reference to AdventureWorks2008R2
CD \sql\localhost\default\databases
$db = get-item Adventureworks2008R2

# 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()

Zobacz także

Odwołanie