Attribute für SQL Server-Projekte und Datenbankobjekte
Aktualisiert: Juli 2008
Auf jedes Microsoft SQL Server-Projekt und auf alle in einem Projekt enthaltenen Datenbank-Objektdateien muss ein Attribut angewendet werden:
Projekt/Datei |
Anzuwendendes Attribut |
---|---|
Projekt |
SqlAssemblyAttribute |
Aggregat |
SqlUserDefinedAggregateAttribute |
Gespeicherte Prozedur |
SqlProcedureAttribute |
Trigger |
SqlTriggerAttribute |
Benutzerdefinierte Funktion |
SqlFunctionAttribute |
Benutzerdefinierter Typ |
SqlUserDefinedTypeAttribute |
SqlAssembly-Attribut
Dieses Attribut muss auf alle Assemblys angewendet werden, die für eine Microsoft SQL Server 2005-Datenbank bereitgestellt werden. Dieses Attribut besitzt keine Parameter. Es wird beim Erstellen eines SQL Server-Projekts der Datei AssemblyInfo hinzugefügt.
SqlUserDefinedAggregate-Attribut
Dieses Attribut muss auf Aggregatdateien angewendet werden. Dieses Attribut verfügt über zwei Eigenschaften: Format und MaxByteSize.
Format
Erforderlich. Das Speicherformat des Aggregats. Folgende Formate werden unterstützt:Native – Gibt an, dass in SQL Server eine effiziente systemeigene Darstellung auf dem Datenträger verwendet wird. Diese Formatoption ist die kompakteste und bietet die beste Leistung. Die Anforderungen für dieses Format sind:
Das StructLayout.LayoutKindSequential-Attribut muss auf das Aggregat angewendet werden.
Alle Felder des Aggregats müssen blitfähig sein, d. h., sie müssen sowohl im verwalteten als auch im nicht verwalteten Arbeitsspeicher über eine gemeinsame Darstellung verfügen und dürfen keine besondere Behandlung durch den Interop-Marshaller erfordern.
Das Aggregat darf für MaxByteSize keinen Wert angeben.
Das Aggregat darf keine [NonSerialized]-Felder besitzen.
Die Felder dürfen nicht als explizites Layout markiert sein.
UserDefined – Gibt an, dass der Benutzer das Binärformat vollständig steuern kann. Die Anforderungen für dieses Format sind:
Das Aggregat muss IBinarySerialize implementieren.
Das Aggregat muss für MaxByteSize einen Wert angeben.
MaxByteSize
Die maximale Größe einer Instanz dieses Aggregats in Bytes. Nur erforderlich, wenn Format auf UserDefined festgelegt ist. Muss nicht angegeben werden, wenn Format auf Native festgelegt ist.
In diesem Beispiel wird angegeben, dass das Format des Aggregats Native ist.
<SqlUserDefinedAggregate(Format.Native)> _
Public Class SampleAggregate
'...
End Class
[SqlUserDefinedAggregate(Format.Native)]
public class SampleAggregate
{
//...
}
SqlProcedure-Attribut
Dieses Attribut muss auf Dateien mit gespeicherten Prozeduren angewendet werden. Dieses Attribut besitzt die folgenden Parameter:
- Name – Optional. Gibt den Namen an, der von SQL Server verwendet wird, um auf die gespeicherte Prozedur zu verweisen.
In diesem Beispiel wird angegeben, dass mit sp_sqlName auf die gespeicherte Prozedur verwiesen wird.
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-Attribut
Dieses Attribut muss auf Triggerdateien angewendet werden. Dieses Attribut besitzt die folgenden Parameter:
Name – Optional. Gibt den Namen an, der von SQL Server verwendet wird, um auf den Trigger zu verweisen.
Target – Erforderlich. Gibt die Tabelle an, auf die der Trigger angewendet wird.
Event – Erforderlich. Gibt die Aktion an, die den Trigger aktiviert.
Im folgenden Beispiel wird angegeben, dass der Trigger durch die Aktualisierung vorhandener Daten (UPDATE) in der Tabelle authors aktiviert wird.
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()
{
//...
}
}
Im folgenden Beispiel wird angegeben, dass mit dem Namen trig_onpubinsert auf den Trigger verwiesen wird. Der Trigger wird aktiviert, indem der Tabelle publishers neue Daten (INSERT) hinzufügt werden.
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-Attribut
Dieses Attribut muss auf benutzerdefinierte Funktionsdateien angewendet werden, die entweder einen Skalarwert oder eine Tabelle zurückgeben. Dieses Attribut besitzt die folgenden Parameter:
Name – Optional. Gibt den Namen an, der von SQL Server verwendet wird, um auf die benutzerdefinierte Funktion zu verweisen.
Hinweis: Für Funktionen, die einen Tabellenwert zurückgeben, müssen Sie einen Wert für die TableDefinition-Eigenschaft angeben, die die SQL-Darstellung der Definition der zurückgegebenen Tabelle enthält.
Im folgenden Beispiel wird angegeben, dass mit dem Namen sp_scalarFunc auf die benutzerdefinierte Funktion verwiesen wird.
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 "";
}
}
Im folgenden Beispiel wird angegeben, dass mit dem Namen sp_tableFunc auf die benutzerdefinierte Funktion verwiesen wird. Die TableDefinition-Eigenschaft verfügt über den Wert 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-Attribut
Dieses Attribut muss auf Dateien mit benutzerdefiniertem Typ angewendet werden. Dieses Attribut verfügt über vier Eigenschaften: Format, MaxByteSize, IsFixedLength und IsByteOrdered.
Format
Erforderlich. Das Speicherformat des benutzerdefinierten Typs. Folgende Formate werden unterstützt:Native – Gibt an, dass in SQL Server eine effiziente systemeigene Darstellung auf dem Datenträger verwendet wird. Dies ist die kompakteste Option, mit der i. d. R. die optimale Leistung erzielt wird. Die Anforderungen für dieses Format sind:
Das StructLayout.LayoutKindSequential-Attribut muss auf den Typ angewendet werden.
Alle Felder des benutzerdefinierten Typs müssen blitfähig sein, d. d., sie müssen sowohl im verwalteten als auch im nicht verwalteten Arbeitsspeicher über eine gemeinsame Darstellung verfügen und dürfen keine besondere Behandlung durch den Interop-Marshaller erfordern.
Der Typ darf für MaxByteSize keinen Wert angeben.
Der Typ darf keine [NonSerialized]-Felder besitzen.
Die Felder dürfen nicht als explizites Layout markiert sein.
UserDefined – Gibt an, dass der Benutzer das Binärformat vollständig steuern kann. Die Anforderungen für dieses Format sind:
Der Typ muss IBinarySerialize implementieren.
Der Typ muss für MaxByteSize einen Wert angeben.
MaxByteSize
Erforderlich. Die maximale Größe einer Instanz dieses Typs in Bytes.IsFixedLength
Optional. Gibt an, ob alle Instanzen des Typs die gleiche Länge besitzen. Der Standardwert lautet "false".IsByteOrdered
Optional. Gibt an, ob die binäre Darstellung dieses Typs geordnet ist, ob sie also für Vergleiche von Instanzen dieses Typs verwendet werden kann. Der Standardwert lautet "false".
In diesem Beispiel wird angegeben, dass das Format des benutzerdefinierten Typs SerializedDataWithMetadataist undMaxByteSize 8000 Bytes beträgt.
<SqlUserDefinedType(Format.Native, MaxByteSize:=8000)> _
Public Class SampleType
'...
End Class
[SqlUserDefinedType(Format.Native, MaxByteSize=8000)]
public class SampleType
{
//...
}
Siehe auch
Aufgaben
Gewusst wie: Erstellen eines SQL Server-Projekts
Gewusst wie: Erstellen und Ausführen einer gespeicherten CLR SQL Server-Prozedur
Gewusst wie: Erstellen und Ausführen eines CLR SQL Server-Triggers
Gewusst wie: Erstellen und Ausführen eines CLR SQL Server-Aggregats
Gewusst wie: Erstellen und Ausführen einer benutzerdefinierten CLR SQL Server-Funktion
Gewusst wie: Erstellen und Ausführen eines benutzerdefinierten CLR-SQL Server-Typs
Exemplarische Vorgehensweise: Erstellen einer gespeicherten Prozedur in verwaltetem Code
Gewusst wie: Debuggen einer gespeicherten Prozedur in SQL/CLR
Konzepte
Einführung in CLR-Integration für SQL Server (ADO.NET)
Vorteile von verwaltetem Code bei der Erstellung von Datenbankobjekten
Elementvorlagen für SQL Server-Projekte
Referenz
Attribute für SQL Server-Projekte und Datenbankobjekte
Weitere Ressourcen
Debuggen von SQL CLR-Datenbanken
Änderungsprotokoll
Date |
Versionsgeschichte |
Grund |
---|---|---|
Juli 2008 |
Informationen zum MaxByteSize-Attribut für das SQLUserDefinedAggregate-Attribut aktualisiert. |
Korrektur inhaltlicher Fehler. |