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 使用者定義型別