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:建立及執行 CLR SQL Server 預存程序
HOW TO:建立及執行 CLR SQL Server 觸發程序
HOW TO:建立及執行 CLR SQL Server 彙總
HOW TO:建立及執行 CLR SQL Server 使用者定義函式
HOW TO:建立及執行 CLR SQL Server 使用者定義型別
概念
參考
其他資源
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2008 年 7 月 |
更新 SQLUserDefinedAggregate 屬性的 MaxByteSize 屬性相關資訊。 |
內容 Bug 修正。 |