Share via


SQL CLR 資料庫專案和資料庫物件的屬性

屬性必須套用至每個 SQL Server 專案,以及專案包含的所有資料庫物件。 您可以使用 SQL Server 通用語言執行階段整合 (SQL CLR) 來建立下列類型的物件:

專案 / 檔案

必須套用的屬性

Project

SqlAssemblyAttribute

Aggregate

SqlUserDefinedAggregateAttribute

預存程序

SqlProcedureAttribute

觸發程序

SqlTriggerAttribute

使用者定義函式

SqlFunctionAttribute

使用者定義型別

SqlUserDefinedTypeAttribute

SqlAssembly 屬性

這個屬性必須套用至所有部署到 SQL Server 資料庫的組件。 這個屬性沒有參數。 當您建立 SQL Server 專案時,它便會加入至 AssemblyInfo 檔案。

SqlUserDefinedAggregate 屬性

這個屬性必須套用至使用者定義的彙總物件。 此屬性具有兩個屬性:FormatandMaxByteSize.

  • Format
    必要項。 彙總的儲存格式。 支援的格式如下所示:

    Native- 指定 SQL Server 使用磁碟機上的有效原生表示。 這個格式選項最精簡,可提供最佳效能。 這個格式的需求如下:

    • StructLayout.LayoutKindSequential 屬性必須套用至彙總。

    • 彙總的所有欄位都必須是 Blittable,也就是說,在 Managed 和 Unmanaged 記憶體中,它們必須有共同表示,而且不需要 Interop 封送處理器的特殊處理。

    • 彙總不可以指定 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:必要項。 指定啟動觸發程序的動作。

這個範例會指定因更新 (UPDATE) 資料表 authors 中的現有資料而啟動觸發程序。

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 參考觸發程序。 將新資料加入 (INSERT) 至資料表 publishers,即會啟動觸發程序。

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 屬性

這個屬性必須套用至使用者定義的型別物件。 此屬性具有四個屬性:Format、MaxByteSize、IsFixedLength 和 IsByteOrdered

  • Format
    必要項。 使用者定義型別的儲存格式。 支援的格式如下所示:

    Native- 指定 SQL Server 使用磁碟機上的有效原生表示。 這是一個最精簡的選項,通常會產生最佳效能。 這個格式的需求如下:

    • StructLayout.LayoutKindSequential 屬性必須套用至型別。

    • 使用者定義之型別的所有欄位都必須是 Blittable,也就是說,在 Managed 和 Unmanaged 記憶體中,它們必須有共同表示,而且不需要 Interop 封送處理器的特殊處理。

    • 此型別不可以指定 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
{
   //...
}

請參閱

工作

HOW TO:針對使用 SQL Server Common Language Run-time 整合的資料庫物件建立專案

HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 預存程序

HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 觸發程序

HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 彙總

HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 使用者定義函式

HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 使用者定義型別

逐步解說:使用 Managed 程式碼建立預存程序

HOW TO:偵錯 SQL CLR 預存程序

概念

SQL Server CLR 整合簡介 (ADO.NET)

使用 Managed 程式碼建立資料庫物件的好處