共用方式為


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

更新: 2008 年 7 月

每個 Microsoft SQL Server 專案和專案所包含的所有資料庫物件檔案,都必須套用屬性:

專案 / 檔案

必須套用的屬性

專案

SqlAssemblyAttribute

彙總

SqlUserDefinedAggregateAttribute

預存程序

SqlProcedureAttribute

觸發程序

SqlTriggerAttribute

使用者定義函式

SqlFunctionAttribute

使用者定義型別

SqlUserDefinedTypeAttribute

SqlAssembly 屬性

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

SqlUserDefinedAggregate 屬性

這個屬性必須套用至彙總檔案。這個屬性 (Attribute) 有兩個屬性 (Property):Format 和 MaxByteSize。

  • 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:必要項。指定觸發程序所套用的資料表。

  • 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 屬性的值,其中包含所傳回資料表之定義的 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 屬性

這個屬性必須套用至使用者定義型別檔案。這個屬性 (Attribute) 有四個屬性 (Property):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 專案

HOW TO:建立及執行 CLR SQL Server 預存程序

HOW TO:建立及執行 CLR SQL Server 觸發程序

HOW TO:建立及執行 CLR SQL Server 彙總

HOW TO:建立及執行 CLR SQL Server 使用者定義函式

HOW TO:建立及執行 CLR SQL Server 使用者定義型別

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

HOW TO:偵錯 SQL CLR 預存程序

概念

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

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

SQL Server 專案的項目範本

參考

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

其他資源

SQL CLR 資料庫偵錯

變更記錄

日期

記錄

原因

2008 年 7 月

更新 SQLUserDefinedAggregate 屬性的 MaxByteSize 屬性相關資訊。

內容 Bug 修正。