Attributs pour les projets SQL Server et les objets de base de données

Mise à jour : Juillet 2008

Un attribut doit être appliqué à chaque projet SQL Server et à tous les fichiers objets de base de données contenus dans un projet :

Projet / Fichier

Attribut qui doit être appliqué

Projet

SqlAssemblyAttribute

Agrégat

SqlUserDefinedAggregateAttribute

Procédure stockée

SqlProcedureAttribute

Déclencheur

SqlTriggerAttribute

Fonction définie par l'utilisateur

SqlFunctionAttribute

Type défini par l'utilisateur

SqlUserDefinedTypeAttribute

SqlAssembly, attribut

Cet attribut doit être appliqué à tous les assemblys déployés sur une base de données Microsoft SQL Server 2005. Cet attribut ne possède aucun paramètre. Il est ajouté au fichier AssemblyInfo lorsque vous créez un projet SQL Server.

SqlUserDefinedAggregate, attribut

Cet attribut doit être appliqué pour regrouper des fichiers. Cet attribut possède deux propriétés : Format et MaxByteSize.

  • Format
    Obligatoire. Format de stockage de l'agrégat. Les formats suivants sont pris en charge :

    Native : spécifie que SQL Server utilise une représentation native efficace sur disque. Cette option de mise en forme est la plus compacte et fournit les meilleures performances. Les exigences relatives à ce format sont les suivantes :

    • L'attribut StructLayout.LayoutKindSequential doit être appliqué à l'agrégat.

    • Tous les champs de l'agrégat doivent être blittables, ce qui signifie qu'ils doivent avoir une représentation commune à la fois dans la mémoire managée et non managée, et qu'ils n'exigent pas de gestion spéciale par le marshaleur d'interopérabilité.

    • L'agrégat ne doit pas spécifier de valeur pour MaxByteSize.

    • L'agrégat ne doit pas posséder de champ [NonSerialized].

    • Les champs ne doivent pas être marqués comme possédant une disposition explicite.

    UserDefined : spécifie que l'utilisateur a le contrôle total sur le format binaire. Les exigences relatives à ce format sont les suivantes :

    • L'agrégat doit implémenter IBinarySerialize.

    • L'agrégat doit spécifier une valeur pour MaxByteSize.

  • MaxByteSize
    Taille maximale d'une instance de cet agrégat, en octets. Requis uniquement si le Format a la valeur UserDefined. Ne doit pas être spécifié lorsque le Format a la valeur Native.

Cet exemple spécifie que le Format de l'agrégat est Native.

<SqlUserDefinedAggregate(Format.Native)> _
Public Class SampleAggregate
    '...
End Class
[SqlUserDefinedAggregate(Format.Native)]
public class SampleAggregate
{
   //...
}

SqlProcedure, attribut

Cet attribut doit être appliqué aux fichiers de procédures stockées. Il possède le paramètre suivant :

  • Name : facultatif. Spécifie le nom qui est utilisé sur SQL Server pour référencer la procédure stockée.

Cet exemple spécifie que la procédure stockée est référencée à l'aide du nom 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, attribut

Cet attribut doit être appliqué pour déclencher des fichiers. Il possède les paramètres suivants :

  • Name : facultatif. Spécifie le nom qui est utilisé sur SQL Server pour référencer le déclencher.

  • Target : obligatoire. Spécifie la table à laquelle le déclencheur s'applique.

  • Event : obligatoire. Spécifie l'action qui active le déclencheur.

Cet exemple spécifie que le déclencheur est activé lors de la mise à jour des données existantes (UPDATE) dans la table 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()
    {
        //...
    }
}

Cet exemple spécifie que le déclencheur est référencé à l'aide du nom trig_onpubinsert. Le déclencheur est activé en ajoutant de nouvelles données (INSERT) à la table 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()
    {
        //...
    }
}

Attribut SqlFunction

Cet attribut doit être appliqué aux fichiers de fonctions définies par l'utilisateur qui retournent une valeur scalaire ou une table. Il possède les paramètres suivants :

  • Name : facultatif. Spécifie le nom qui est utilisé sur SQL Server pour référencer la fonction définie par l'utilisateur.

    Remarque :

    Pour les fonctions qui retournent une valeur de table, vous devez affecter à la propriété TableDefinition une valeur qui contient la représentation SQL de la définition de la table retournée.

Cet exemple spécifie que la fonction définie par l'utilisateur est référencée à l'aide du nom 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 "";
    }
}

Cet exemple spécifie que la fonction définie par l'utilisateur est référencée à l'aide du nom sp_tableFunc. La propriété TableDefinition a la valeur 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

Cet attribut doit être appliqué aux fichiers de types définis par l'utilisateur. Cet attribut possède quatre propriétés : Format, MaxByteSize, IsFixedLength et IsByteOrdered.

  • Format
    Obligatoire. Format de stockage du type défini par l'utilisateur. Les formats suivants sont pris en charge :

    Native : spécifie que SQL Server utilise une représentation native efficace sur disque. Il s'agit de l'option la plus compacte qui garantit généralement des performances optimales. Les exigences relatives à ce format sont les suivantes :

    • L'attribut StructLayout.LayoutKindSequential doit être appliqué au type.

    • Tous les champs du type défini par l'utilisateur doivent être blittables, ce qui signifie qu'ils doivent avoir une représentation commune à la fois dans la mémoire managée et non managée, et qu'ils n'exigent pas de gestion spéciale par le marshaleur d'interopérabilité.

    • Le type ne doit pas spécifier de valeur pour MaxByteSize.

    • Le type ne doit pas posséder de champ [NonSerialized].

    • Les champs ne doivent pas être marqués comme possédant une disposition explicite.

    UserDefined : spécifie que l'utilisateur a le contrôle total sur le format binaire. Les exigences relatives à ce format sont les suivantes :

    • Le type doit implémenter IBinarySerialize.

    • Le type doit spécifier une valeur pour MaxByteSize.

  • MaxByteSize
    Obligatoire. Taille maximale d'une instance de ce type, en octets.

  • IsFixedLength
    Facultatif. Indique si toutes les instances du type possèdent la même longueur. La valeur par défaut est false.

  • IsByteOrdered
    Facultatif. Indique si la représentation binaire de ce type est classée, c'est-à-dire si elle peut être utilisée pour comparer des instances de ce type. La valeur par défaut est false.

Cet exemple spécifie que le Format du type défini par l'utilisateur est SerializedDataWithMetadataet que la taille maximale(MaxByteSize) est de 8 000 octets.

<SqlUserDefinedType(Format.Native, MaxByteSize:=8000)> _
Public Class SampleType

   '...
End Class
[SqlUserDefinedType(Format.Native, MaxByteSize=8000)]
public class SampleType
{
   //...
}

Voir aussi

Tâches

Comment : créer un projet SQL Server

Comment : créer et exécuter une procédure stockée SQL Server CLR

Comment : créer et exécuter un déclencheur SQL Server CLR

Comment : créer et exécuter un agrégat SQL Server CLR

Comment : créer et exécuter une fonction définie par l'utilisateur SQL Server CLR

Comment : créer et exécuter un type défini par l'utilisateur SQL Server CLR

Procédure pas à pas : création d'une procédure stockée dans le code managé

Comment : déboguer une procédure stockée SQL CLR

Concepts

Présentation de l'intégration de CLR dans SQL Server (ADO.NET)

Avantages de l'utilisation de code managé pour créer des objets de base de données

Modèles d'élément pour les projets SQL Server

Référence

Attributs pour les projets SQL Server et les objets de base de données

Autres ressources

Débogage d'une base de données SQL CLR

Historique des modifications

Date

Historique

Raison

Juillet 2008

Informations mises à jour concernant l'attribut MaxByteSize pour l'attribut SQLUserDefinedAggregate.

Résolution des bogues de contenu.