SQL CLR データベース プロジェクトおよびデータベース オブジェクトの属性

各 SQL Server プロジェクトおよびプロジェクトに含まれるすべてのデータベース オブジェクトには、属性を適用する必要があります。 SQL Server 共通言語ランタイム統合 (SQL CLR) 機能を使用して、次の種類のオブジェクトを作成できます。

プロジェクト/ファイル

適用する必要のある属性

プロジェクト

SqlAssemblyAttribute

Aggregate

SqlUserDefinedAggregateAttribute

ストアド プロシージャ

SqlProcedureAttribute

トリガー

SqlTriggerAttribute

ユーザー定義関数

SqlFunctionAttribute

ユーザー定義型

SqlUserDefinedTypeAttribute

SqlAssembly 属性

この属性は、SQL Server データベースに配置するすべてのアセンブリに適用する必要があります。 この属性には、パラメーターがありません。 この属性は、SQL Server プロジェクトの作成時に AssemblyInfo ファイルに追加されます。

SqlUserDefinedAggregate 属性

この属性は、ユーザー定義の集計オブジェクトに適用する必要があります。 この属性は、2 つのプロパティがあります。FormatandMaxByteSize.

  • Format
    必ず指定します。 集計のストレージ形式。 サポートされる形式は次のとおりです。

    Native: SQL Server がディスクで効率的なネイティブの表現を使用することを指定します。 この形式オプションで、最も容量が少なく、最高のパフォーマンスを実現できます。 この形式の要件は次のとおりです。

    • StructLayout.LayoutKindSequential 属性は、集計に適用する必要があります。

    • 集計のすべてのフィールドは、blittable 型である必要があります。つまり、これらのフィールドは、マネージ メモリとアンマネージ メモリの両方に共通の表現を使用し、特殊な相互運用マーシャラーによる処理は不要です。

    • 集計では、MaxByteSize の値を指定しないでください。

    • 集計には、[NonSerialized] のフィールドを使用できません。

    • フィールドは、明示的なレイアウトとして指定しないでください。

    UserDefined : ユーザーがバイナリ形式に対してフル コントロールがあることを示します。 この形式の要件は次のとおりです。

    • 集計で IBinarySerialize を実装する必要があります。

    • 集計で MaxByteSize の値を指定する必要があります。

  • MaxByteSize
    この集計のインスタンスの最大サイズ (バイト単位)。 Format を UserDefined に設定する場合にのみ、必須です。 Format を Native に設定した場合は、これを指定しないでください。

この例では、集計の Format を Native に指定します。

<SqlUserDefinedAggregate(Format.Native)>
Public Class SampleAggregate
    '...
End Class
[SqlUserDefinedAggregate(Format.Native)]
public class SampleAggregate
{
   //...
}

SqlProcedure 属性

この属性は、ストアド プロシージャ オブジェクトに適用する必要があります。 この属性には、次のパラメーターがあります。

  • Name : 省略できます。 SQL Server でストアド プロシージャを参照するための名前を指定します。

次の例では、sp_sqlName という名前を使用してストアド プロシージャを参照するように指定しています。

Partial Public Class StoredProcedures

    <SqlProcedure(Name:="sp_sqlName")>
    Public Shared Sub SampleProcedure(ByVal s As SqlString)
        '...
    End Sub
End Class
public partial class StoredProcedures
{
    [SqlProcedure(Name="sp_sqlName")]
    public static void SampleProcedure(SqlString s)
    {
        //...
    }
}

SqlTrigger 属性

この属性は、トリガー オブジェクトに適用する必要があります。 この属性には、次のパラメーターがあります。

  • Name : 省略できます。 SQL Server でトリガーを参照するための名前を指定します。

  • Target: 必ず指定します。 トリガーを適用するターゲットを指定します。 ターゲットの種類は、作成するターゲットの種類によって変わります。 DDL、DML、または LOGON の各トリガーを作成できます。 最も一般的なトリガーの種類がテーブルに適用されます。

  • Event: 必ず指定します。 トリガーをアクティブにするアクションを指定します。

次の例では、authors テーブルで既存のデータを更新 (UPDATE) して、トリガーをアクティブにします。

Partial Public Class Triggers

    <SqlTrigger(Target:="authors", Event:="FOR UPDATE")>
    Public Shared Sub AuthorsUpdateTrigger()

        '...
    End Sub
End Class
public partial class Triggers
{
    [SqlTrigger(Target="authors", Event="FOR UPDATE")]
    public static void AuthorsUpdateTrigger()
    {
        //...
    }
}

次の例では、trig_onpubinsert という名前を使用してトリガーを参照するように指定しています。 publishers テーブルに新しいデータを追加 (INSERT) すると、トリガーがアクティブにされます。

Partial Public Class Triggers

    <SqlTrigger(Name:="trig_onpubinsert", Target:="publishers", Event:="FOR INSERT")>
    Public Shared Sub PublishersInsertTrigger()

        '...
    End Sub
End Class
public partial class Triggers
{
    [SqlTrigger(Name="trig_onpubinsert", Target="publishers", Event="FOR INSERT")]
    public static void PublishersInsertTrigger()
    {
        //...
    }
}

SqlFunction 属性

この属性は、スカラー値またはテーブルを返すユーザー定義関数オブジェクトに適用する必要があります。 この属性には、次のパラメーターがあります。

  • Name : 省略できます。 SQL Server でユーザー定義関数を参照するための名前を指定します。

    注意

    テーブルの値を返す関数については、TableDefinition プロパティの値を指定する必要があります。このプロパティには、返されたテーブルの定義の Transact-SQL 表現が格納されます。

次の例では、sp_scalarFunc という名前を使用してユーザー定義関数を参照するように指定しています。

Partial Public Class UserDefinedFunctions

    <SqlFunction(Name:="sp_scalarFunc")> 
    Public Shared Function SampleScalarFunction(ByVal s As SqlString) As SqlString

        '...
        Return ""
    End Function
End Class
public partial class UserDefinedFunctions
{
    [SqlFunction(Name="sp_scalarFunc")]
    public static SqlString SampleScalarFunction(SqlString s)
    {
        //...
        return "";
    }
}

次の例では、sp_tableFunc という名前を使用してユーザー定義関数を参照するように指定しています。 TableDefinition プロパティには、letter nchar(1) の値が含まれます。

Partial Public Class UserDefinedFunctions

    <SqlFunction(Name:="sp_tableFunc", TableDefinition:="letter nchar(1)")> 
    Public Shared Function SampleTableFunction(ByVal s As SqlString) As IEnumerable

        '...
        Return New Char(2) {"a"c, "b"c, "c"c}
    End Function
End Class
public partial class UserDefinedFunctions
{
    [SqlFunction(Name="sp_tableFunc", TableDefinition="letter nchar(1)")]
    public static IEnumerable SampleTableFunction(SqlString s)
    {
        //...
        return new ArrayList(new char[3] {'a', 'b', 'c'});
    }
}

SqlUserDefinedType 属性

この属性は、ユーザー定義型オブジェクトに適用する必要があります。 この属性は、4 つのプロパティがあります。Format、MaxByteSize、IsFixedLength、および IsByteOrdered。

  • Format
    必ず指定します。 ユーザー定義型のストレージ形式。 サポートされる形式は次のとおりです。

    Native: SQL Server がディスクで効率的なネイティブの表現を使用することを指定します。 これは最もサイズの小さいオプションで、通常、最良のパフォーマンスを実現します。 この形式の要件は次のとおりです。

    • StructLayout.LayoutKindSequential 属性は、型に適用する必要があります。

    • ユーザー定義型のすべてのフィールドは、blittable 型である必要があります。つまり、これらのフィールドは、マネージ メモリとアンマネージ メモリの両方に共通の表現を使用し、特殊な相互運用マーシャラーによる処理は不要です。

    • 型では、MaxByteSize の値を指定しないでください。

    • 型には、[NonSerialized] のフィールドを使用できません。

    • フィールドは、明示的なレイアウトとして指定しないでください。

    UserDefined : ユーザーがバイナリ形式に対してフル コントロールがあることを示します。 この形式の要件は次のとおりです。

    • 型で IBinarySerialize を実装する必要があります。

    • 型で MaxByteSize の値を指定する必要があります。

  • MaxByteSize
    必ず指定します。 この型のインスタンスの最大サイズ (バイト単位)。

  • IsFixedLength
    省略可能です。 この型のすべてのインスタンスを同じ長さにするかどうかを指定します。 既定値は false です。

  • IsByteOrdered
    省略可能です。 この型のバイナリ表現に順序を付けるかどうか、つまり、この型のバイナリ表現を使用してこの型のインスタンスを比較できるかどうかを、指定します。 既定値は false です。

次の例では、ユーザー定義型の Format を SerializedDataWithMetadata に、MaxByteSize を 8000 バイトに指定しています。

<SqlUserDefinedType(Format.Native, MaxByteSize:=8000)>
Public Class SampleType

   '...
End Class
[SqlUserDefinedType(Format.Native, MaxByteSize=8000)]
public class SampleType
{
   //...
}

参照

処理手順

方法: SQL Server 共通言語ランタイム統合機能を使用するデータ オブジェクトのプロジェクトを作成する

方法: 共通言語ランタイム統合機能を使用して SQL Server ストアド プロシージャを作成および実行する

方法: 共通言語ランタイム統合機能を使用して SQL Server のトリガーを作成および実行する

方法: 共通言語ランタイム統合機能を使用して SQL Server の集計を作成および実行する

方法: 共通言語ランタイム統合機能を使用して SQL Server のユーザー定義関数を作成および実行する

方法: 共通言語ランタイム統合機能を使用して SQL Server のユーザー定義型を作成および実行する

チュートリアル : マネージ コードでのストアド プロシージャの作成

方法 : SQL CLR のストアド プロシージャをデバッグする

概念

SQL Server の CLR 統合の概要 (ADO.NET)

マネージ コードを使用したデータベース オブジェクトの作成の利点