Attributs pour les projets de base de données CLR SQL et les objets de base de données
Un attribut doit être appliqué à chaque projet SQL Server et à tous les objets de base de données qu'un projet contient. Vous pouvez utiliser l'intégration du Common Language Runtime SQL Server (CLR SQL) pour créer les types d'objets suivants :
Projet / Fichier |
Attribut qui doit être appliqué |
---|---|
Projet |
SqlAssemblyAttribute |
Aggregate |
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 dans une base de données SQL Server. 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é aux objets d'agrégats définis par l'utilisateur. Cet attribut possède deux propriétés : Format etMaxByteSize.
Format
Obligatoire. Format de stockage de l'agrégat. Les formats pris en charge sont les suivants :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 spécifications 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 spécifications 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 objets 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 objets. 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éclencheur.
Target : obligatoire. Spécifie la cible à laquelle le déclencheur s'applique. Le type de cible dépend du type de cible que vous créez. Vous pouvez créer des déclencheurs DDL, DML ou LOGON. Le type le plus courant de déclencheur est appliqué aux tables.
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 objets de fonctions définis 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.
Notes
Pour les fonctions qui retournent une valeur de table, vous devez affecter à la propriété TableDefinition une valeur qui contient la représentation Transact-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 objets 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 pris en charge sont les suivants :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 spécifications 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 spécifications 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 SerializedDataWithMetadata et MaxByteSize est 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
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