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.